using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using skyscraper5.Docsis;
using skyscraper5.Docsis.MacManagement;
using skyscraper5.Dvb.DataBroadcasting.SkyscraperVfs;
using skyscraper5.Dvb.Descriptors;
using skyscraper5.Dvb.Psi.Model;
using skyscraper5.Mhp.Si.Model;
using skyscraper5.Mpeg2.Descriptors;
using skyscraper5.Mpeg2.Psi.Model;
using skyscraper5.Scte35;
using skyscraper5.Skyscraper.Net;
using skyscraper5.src.Skyscraper.FrequencyListGenerator;
using skyscraper5.Teletext.Wss;

namespace skyscraper5.Skyscraper.Scraper
{
    public interface ISkyscraperUiJunction
    {
        void NotifyEvent(EitEvent eitEvent);
        void NotifySdtService(SdtService sdtService);
        void NotifyPatProgram(int pmtPid, ushort programId);
        void NotifyPmtProgram(ProgramMapping result, int pmtPid);
        void NotifyNit(NitTransportStream transportStream);
        void NotifyMpeTraffic(IpTrafficInfo iti, int ipv4PacketLength);
        void NotifyAit(AitApplication aitApplication);
        void DsmCcModuleAdd(int elementaryPid, ushort moduleInfoModuleId, byte moduleInfoModuleVersion);
        void DsmCcModuleProgress(int elementaryPid, ushort moduleInfoModuleId, byte moduleInfoModuleVersion, double moduleInfoDownloadProgress);
        void DsmCcModuleComplete(int elementaryPid, ushort moduleModuleId, byte moduleModuleVersion);
        void NotifyWss(ushort programNumber, WssDataBlock wssDataBlock);
        void NotifyStreamTypeDetection(string contestantTag, int pid);
        void NotifyBat(BatBouquet batBouquet);
        void NotifyBatTs(ushort batBouquetBouquetId, BatTransportStream child);
        void DsmCcVfs(VfsFile vfsFile);
        void NotifyTot(DateTime utcTime, LocalTimeOffsetDescriptor ltod);
        void NotifyTdt(DateTime utcTime);
        void NotifyCat(CaDescriptor caDescriptor);
        void NotifyScte35(ushort programNumber, SpliceInsert spliceInsert);
        void NotifyScte35(ushort programNumber, TimeSignal spliceInsert);
        void SetMemorySaverMode(bool saveMemory);
        void NotifyDocsisCarrier(DocsisEnvironment docsisEnvironment);
        void NotifyDocsisFrequency(uint? frequency, bool isUpstream, object mmm);
        void SetGseMode();
        void ShowFramegrab(int currentNetworkId, int transportStreamId, ushort mappingProgramNumber, int mappingStreamElementaryPid, byte[] imageData);
        void NotifyBlockstreamCarrier();

        IEnumerable<HumanReadableService> GetServices();
    }
}
