using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.NetworkInformation;
using MySqlConnector;
using skyscraper5.Docsis.MacManagement;
using skyscraper5.Dvb.DataBroadcasting.IntModel;
using skyscraper5.Dvb.Psi.Model;
using skyscraper5.Dvb.TvAnytime;
using skyscraper5.Mpeg2.Psi.Model;
using skyscraper5.Rds.Messages;
using skyscraper5.Skyscraper;
using skyscraper5.Skyscraper.Equipment;
using skyscraper5.Skyscraper.Gps;
using skyscraper5.Skyscraper.Headless;
using skyscraper5.Skyscraper.IO.CrazycatStreamReader;
using skyscraper5.Skyscraper.Scraper.Storage.Utilities;
using skyscraper5.src.InteractionChannel.Model.Descriptors;
using skyscraper5.src.InteractionChannel.Model;
using skyscraper5.src.InteractionChannel.Model2;
using skyscraper5.src.Skyscraper.FrequencyListGenerator;
using skyscraper5.src.Skyscraper.Scraper.Dns;
using skyscraper5.Teletext;
using skyscraper8.InteractionChannel.Model;
using skyscraper8.InteractionChannel.Model2;
using skyscraper8.InteractionChannel.Model2.Descriptors;
using skyscraper8.Skyscraper.Scraper.Storage;

namespace skyscraper5.Data.MySql
{
    public partial class MySqlDataStorage : DataStorage
    {
        private readonly MySqlConnectionStringBuilder _mcsb;

        public MySqlDataStorage(MySqlConnectionStringBuilder mcsb)
        {
            _mcsb = mcsb;
        }

        public bool TestForKnownRdsData(int currentNetworkId, int currentTransportStreamId, int programNumber)
        {
            throw new NotImplementedException();
        }

        public void EnableRdsCollection(int currentNetworkId, int currentTransportStreamId, int programNumber)
        {
            throw new NotImplementedException();
        }

        public bool UpdateRdsProgrammeServiceName(int currentNetworkId, int currentTransportStreamId, int programNumber,
            string programmeService2)
        {
            throw new NotImplementedException();
        }

        public bool UpdateRdsRadioText(int currentNetworkId, int currentTransportStreamId, int programNumber, string text)
        {
            throw new NotImplementedException();
        }

        public bool UpdateRdsPty(int currentNetworkId, int currentTransportStreamId, int programNumber, PTY.ProgrammeTypeCodes pty)
        {
            throw new NotImplementedException();
        }

        public bool MarkAsRdsTrafficInformationProgramme(int currentNetworkId, int currentTransportStreamId, int programNumber)
        {
            throw new NotImplementedException();
        }






        public bool StoreRunningStatus(uint transportStreamId, uint originalNetworkId, uint serviceId, uint eventId,
            RunningStatus runningStatus, DateTime currentTime)
        {
            throw new NotImplementedException();
        }

        public bool AprsGpsSentence(DateTime currentTime, string packetSender, double? course, double? magneticVariation,
            double? speed)
        {
            throw new NotImplementedException();
        }


        public DateTime T2MiGetTimestamp(int currentNetworkId, int currentTransportStreamId, int pid)
        {
            throw new NotImplementedException();
        }

        public void T2MiSetTimestamp(int currentNetworkId, int currentTransportStreamId, int pid, DateTime resolveTime)
        {
            throw new NotImplementedException();
        }

        public bool TestForRelatedContent(EitEvent lEvent, RctLinkInfo rctLinkInfo)
        {
            throw new NotImplementedException();
        }

        public void SetRelatedContent(EitEvent lEvent, RctLinkInfo rctLinkInfo)
        {
            throw new NotImplementedException();
        }

        public void UiSatellitesAdd(SatellitePositionEntity newPosition)
        {
            throw new NotImplementedException();
        }

        public void UiSatellitesDelete(SatellitePositionEntity satellitePosition)
        {
            throw new NotImplementedException();
        }

        public bool UiTunerTestFor(TunerMetadata tuner)
        {
            throw new NotImplementedException();
        }

        public void UiTunerUpdate(TunerMetadata tuner)
        {
            throw new NotImplementedException();
        }

        public void UiTunerInsert(TunerMetadata tuner)
        {
            throw new NotImplementedException();
        }

        public void UiTunerGetConfiguration(TunerMetadata foundTuner)
        {
            throw new NotImplementedException();
        }

        public bool TestForDocsisUpstreamChannel(PhysicalAddress mmmSource, uint mmmFrequency, int currentLocation)
        {
            throw new NotImplementedException();
        }

        public void StoreDocsisUpstreamChannel(UpstreamChannelDescriptor mmm, int currentLocation)
        {
            throw new NotImplementedException();
        }

        public bool TestForDocsisDownstreamChannel(PhysicalAddress physicalAddress, MacDomainDescriptor.DownstreamActiveChannel downstreamActiveChannel,
            int currentLocation)
        {
            throw new NotImplementedException();
        }

        public void StoreDocsisDownstreamChannel(PhysicalAddress physicalAddress, MacDomainDescriptor.DownstreamActiveChannel downstreamActiveChannel,
            int currentLocation)
        {
            throw new NotImplementedException();
        }

        public bool SetCmtsIp(PhysicalAddress arpHeaderSenderHardwareAddress, IPAddress arpHeaderSenderProtocolAddress)
        {
            throw new NotImplementedException();
        }



        public void StoreDocsisParticipant(PhysicalAddress pa, int currentLocation)
        {
            throw new NotImplementedException();
        }

        public void WaitForCompletion()
        {
            if (IsEitWriterThreadRunning())
            {
                eitWriterThread.Join();
            }
            eitCoordinatesCache?.Clear();
            eitCoordinatesCacheIndex?.Clear();
            knownPmts?.Clear();
            knownPats?.Clear();
            _catCoordinates?.Clear();
            
            _untGroupCoordinates?.Clear();
            _compatibilityCoordinates?.Clear();
            _platformCoordinates?.Clear();
            _batTransportStreamCoordinates?.Clear();
            _sdtCoordinates?.Clear();
            _tdtCoordinates?.Clear();
            _totCoordinates?.Clear();
            _tsdtCoordinates?.Clear();

            if (IsSpeedhackThreadAlive())
            {
                _waitingForSpeedhacksToComplete = true;
                _speedhackThread.Join();
                _speedhackQueue.Clear();
                _waitingForSpeedhacksToComplete = false;
            }

            _sdtUpdateCoordinates?.Clear();
        }

        public void UiSetVersion(int version)
        {
            throw new NotImplementedException();
        }

		public bool StoreTeletextPage(int networkId, int transportStreamId, ushort programNumber, TeletextMagazine magazine, DateTime timestamp)
		{
			throw new NotImplementedException();
		}

		public void ImportMarkFileAsKnown(FileInfo fi, TimeSpan duration, int tstype)
		{
			throw new NotImplementedException();
		}

		public bool T2MiTestForTransmitter(int? currentNetworkId, int? currentTransportStreamId, int relatedPid, ushort txIdentifier)
		{
			throw new NotImplementedException();
		}

		public void T2MiRememberTransmitter(int? currentNetworkId, int? currentTransportStreamId, int relatedPid, ushort txIdentifier)
		{
			throw new NotImplementedException();
		}

		public void T2MiSetTransmitterTimeOffset(int? currentNetworkId, int? currentTransportStreamId, int relatedPid, ushort txIdentifier, ushort timeOffset)
		{
			throw new NotImplementedException();
		}

		public List<LnbEntity> UiLnbTypesListAll()
		{
			throw new NotImplementedException();
		}

		public void UiLnbTypesAdd(LnbEntity defaultLnbType)
		{
			throw new NotImplementedException();
		}

		public List<DishEntity> UiDishTypesListAll()
		{
			throw new NotImplementedException();
		}

		public void UiDishTypesAdd(DishEntity defaultDishType)
		{
			throw new NotImplementedException();
		}

		public object[] GetPluginConnector()
		{
			throw new NotImplementedException();
		}

		public void Ping()
		{
			throw new NotImplementedException();
		}

		public bool TestForTerminalBurstTimePlan2(ushort interactiveNetworkId, byte tbtp2GroupId, byte frameFrameNumber)
		{
			throw new NotImplementedException();
		}

		public void StoreTerminalBurstTimePlan2(ushort interactiveNetworkId, byte tbtp2GroupId, Tbtp2.Frame frame)
		{
			throw new NotImplementedException();
		}

		public bool TestForFrameComposition2(ushort networkId, Fct2.Frame fct2)
		{
			throw new NotImplementedException();
		}

		public void InsertFct2Frame(ushort networkId, Fct2.Frame frame)
		{
			throw new NotImplementedException();
		}

		public bool TestForBroadcastConfiguration(ushort networkId, byte txTypeTxType)
		{
			throw new NotImplementedException();
		}

		public void InsertBroadcastConfiguration(ushort networkId, Bct.BroadcastConfiguration txType)
		{
			throw new NotImplementedException();
		}

		public bool TestForRcs2Nit(RcsNit nit)
		{
			throw new NotImplementedException();
		}

		public void InsertRcs2Nit(RcsNit nit)
		{
			throw new NotImplementedException();
		}

		public bool UpdateRcs2Tdt(ushort interactiveNetworkId, DateTime tdtTimestamp)
		{
			throw new NotImplementedException();
		}

		public bool TestForTmst2(ushort interactiveNetworkId, Tmst2.TransmissionMode mode)
		{
			throw new NotImplementedException();
		}

		public void InsertTmst2(ushort interactiveNetworkId, Tmst2.TransmissionMode mode)
		{
			throw new NotImplementedException();
		}

		public bool TestForTimFramePayloadFormat(ushort networkId, _0xb7_FramePayloadFormatDescriptor.TransmissionContext transmissionContext)
		{
			throw new NotImplementedException();
		}

		public void InsertTimFramePayloadFormat(ushort networkId, _0xb7_FramePayloadFormatDescriptor.TransmissionContext transmissionContext)
		{
			throw new NotImplementedException();
		}

		public bool TestForTimCorrectionMessageExtension(PhysicalAddress macAddress)
		{
			throw new NotImplementedException();
		}

		public void InsertTimCorrectionMessageExtension(PhysicalAddress macAddress,
			_0xb1_CorrectionMessageExtensionDescriptor descriptor)
		{
			throw new NotImplementedException();
		}

		public bool TestForTimControlAssignment(PhysicalAddress macAddress)
		{
			throw new NotImplementedException();
		}

		public void InsertTimControlAssignment(PhysicalAddress macAddress, _0xa4_SyncAssignDescriptor descriptor)
		{
			throw new NotImplementedException();
		}

		public bool TestForTimSatelliteReturnLink(PhysicalAddress macAddress)
		{
			throw new NotImplementedException();
		}

		public void InsertTimSatelliteReturnLink(PhysicalAddress macAddress, _0xa9_SatelliteReturnLinkDescriptor descriptor)
		{
			throw new NotImplementedException();
		}

		public bool TestForLowerLayerService(PhysicalAddress macAddress)
		{
			throw new NotImplementedException();
		}

		public void InsertTimLowerLayerService(PhysicalAddress macAddress, _0xbb_LowerLayerServiceDescriptor descriptor)
		{
			throw new NotImplementedException();
		}

		public bool TestForHigherLayerServiceInitalization(PhysicalAddress macAddress, _0xc4_HigherLayersInitializeDescriptor.Layer2Interface layer2Interface)
		{
			throw new NotImplementedException();
		}

		public void InsertHigherLayerServiceInitalization(PhysicalAddress macAddress, _0xc4_HigherLayersInitializeDescriptor.Layer2Interface layer2Interface)
		{
			throw new NotImplementedException();
		}

		public bool TestForTimLogonResponse(PhysicalAddress macAddress)
		{
			throw new NotImplementedException();
		}

		public void InsertTimLogonResponse(PhysicalAddress macAddress, _0xb9_LogonResponseDescriptor descriptor)
		{
			throw new NotImplementedException();
		}

		public bool TestForTimForwardInteractionPath(PhysicalAddress macAddress, _0xad_ForwardInteractionPathDescriptor.ForwardInteractionPath forwardInteractionPath)
		{
			throw new NotImplementedException();
		}

		public void InsertTimForwardInteractionPath(PhysicalAddress macAddress, _0xad_ForwardInteractionPathDescriptor.ForwardInteractionPath forwardInteractionPath)
		{
			throw new NotImplementedException();
		}

		public bool TestForRmt(Rmt rmt)
		{
			return true;
		}

		public void InsertRmt(Rmt rmt)
		{
			throw new NotImplementedException();
		}

		public IEnumerable<Tuple<int, int, ProgramMapping>> SelectAllPmt()
		{
			throw new NotImplementedException();
		}

		public SdtService SelectSdtById(int networkId, int tsId, ushort programMappingProgramNumber)
		{
			throw new NotImplementedException();
		}

		public IEnumerable<Tuple<int, int, SdtService>> SelectAllSdt()
		{
			throw new NotImplementedException();
		}

		public void BeamsDisableAll()
		{
			throw new NotImplementedException();
		}

		public void BeamsEnable(int id, float satpos, string name, DateTime processTimestamp)
		{
			throw new NotImplementedException();
		}

		public void BeamFootprintStore(int databasePointerId, DateTime databasePointerBeamsProcessTimestamp, string name, string getPolygonString, string id)
		{
			throw new NotImplementedException();
		}

		public bool TestForBeamFootprint(int databasePointerId, DateTime databasePointerBeamsProcessTimestamp, string name, string id)
		{
			throw new NotImplementedException();
		}

		public void BeamsDisableSpecific(int databasePointerId, float databasePointerSatpos, string databasePointerName, DateTime databasePointerBeamsProcessTimestamp)
		{
			throw new NotImplementedException();
		}

		public IEnumerable<SatelliteBeam> BeamsSelectEnabled()
		{
			throw new NotImplementedException();
		}

		public List<SatelliteBeamFootprint> BeamsSelectFootprints(int satelliteBeamId, DateTime satelliteBeamProcessTimestamp)
		{
			throw new NotImplementedException();
		}

		public void InsertBlindscanJob(DbBlindscanJob jobInDb)
		{
			throw new NotImplementedException();
		}

		public void UpdateJobState(DbBlindscanJob jobInDb)
		{
			throw new NotImplementedException();
		}

		public void InsertSearchResult(DbBlindscanJob jobInDb, bool satellite, SearchResult searchResult, int polarityIndex, SearchResult2 searchResult2)
		{
			throw new NotImplementedException();
		}

		public void UpdateTransponderState(DbBlindscanJob jobInDb, bool satellite, SearchResult searchResult, BlindscanResultState blindscanResultState, SearchResult2 searchResult2)
		{
			throw new NotImplementedException();
		}

		public void InsertTransponderService(DbBlindscanJob jobInDb, bool resultSatellite, SearchResult resultSr1, SearchResult2 resultSr2, HumanReadableService humanReadableService)
		{
			throw new NotImplementedException();
		}

		public bool TestForIncompleteJob()
		{
			throw new NotImplementedException();
		}

		public DbBlindscanJob GetPastBlindscanJob(long offset)
		{
			throw new NotImplementedException();
		}

		public void FailDsmCcDownload(DatabaseKeyDsmCcModule key, double value)
		{
			throw new NotImplementedException();
		}

		public IReadOnlyList<string> ListImportFileByTag1(int tag1)
		{
			throw new NotImplementedException();
		}

		public bool TestForTerminalBurstTimePlan(ushort interactiveNetworkId, uint groupId, uint logonId)
		{
			throw new NotImplementedException();
		}

		public void StoreTerminalBurstTimePlan(ushort interactiveNetworkId, uint gtoupId, uint superframeCount, uint frameNumber, Tbtp.TbtpFrame.BtpEntity btp)
		{
			throw new NotImplementedException();
		}

		public bool TestForCmtEntry(ushort interactiveNetworkId, Cmt.CmtEntry entry)
		{
			throw new NotImplementedException();
		}

		public void InsertCmtEntry(ushort interactiveNetworkId, Cmt.CmtEntry entry)
		{
			throw new NotImplementedException();
		}

		public int GetRmtTransmissionStandard(ushort networkId)
		{
			throw new NotImplementedException();
		}

		public byte[] GetTmst(ushort interactiveNetworkId)
		{
			throw new NotImplementedException();
		}

		public void InsertTmst(ushort interactiveNetworkId, byte[] modes)
		{
			throw new NotImplementedException();
		}

		public void UpdateTmst(ushort interactiveNetworkId, byte[] modes)
		{
			throw new NotImplementedException();
		}

		public bool TestForRmtLinkage(_0x4a_LinkageDescriptor linkage)
		{
			throw new NotImplementedException();
		}

		public void InsertRmtLinkage(_0x4a_LinkageDescriptor linkage)
		{
			throw new NotImplementedException();
		}

		public bool TestForRmtTransportStream(ushort networkId, Rmt.TransportStream transportStream)
		{
			throw new NotImplementedException();
		}

		public void InsertRmtTransportStream(ushort networkId, Rmt.TransportStream transportStream)
		{
			throw new NotImplementedException();
		}

		public bool TestForSuperframeComposition(ushort interactiveNetworkId, Sct.Superframe superframe)
		{
			throw new NotImplementedException();
		}

		public void StoreSuperframeComposition(ushort interactiveNetworkId, Sct.Superframe superframe)
		{
			throw new NotImplementedException();
		}

		public bool TestForFrameComposition(ushort interactiveNetworkId, Fct.Frame frame)
		{
			throw new NotImplementedException();
		}

		public void InsertFctFrame(ushort interactiveNetworkId, Fct.Frame frame)
		{
			throw new NotImplementedException();
		}

		public bool TestForSatellitePosition(ushort interactiveNetworkId, Spt.Satellite satellite)
		{
			throw new NotImplementedException();
		}

		public void StoreSatellitePosition(ushort interactiveNetworkId, Spt.Satellite satellite)
		{
			throw new NotImplementedException();
		}

		public void CreateTim(PhysicalAddress mac)
		{
			throw new NotImplementedException();
		}

		public bool TestForTim(PhysicalAddress mac)
		{
			throw new NotImplementedException();
		}

		public bool CorrectTim(PhysicalAddress mac, _0xa1_CorrectionMessageDescriptor cmd)
		{
			throw new NotImplementedException();
		}

		public bool ContentionTim(PhysicalAddress mac, _0xab_ContentionControlDescriptor ccdNew)
		{
			throw new NotImplementedException();
		}

		public bool CorrectionControlTim(PhysicalAddress mac, _0xac_CorrectionControlDescriptor descriptor)
		{
			throw new NotImplementedException();
		}

		public bool NetworkLayerInfoTim(PhysicalAddress mac, _0xa0_NetworkLayerInfoDescriptor nlid, DateTime timestamp)
		{
			throw new NotImplementedException();
		}

		public IEnumerable<DbBlindscanJob> GetDbBlindscanJobs()
		{
			throw new NotImplementedException();
		}

		public void DeleteBlindscanJob(Guid guid)
		{
			throw new NotImplementedException();
		}

		public void DeleteBlindscanResults(Guid jobGuid, int i)
		{
			throw new NotImplementedException();
		}

		public void MoveBlScanResultsToAnotherJob(Guid jobGuid1, Guid jobGuid2, int j)
		{
			throw new NotImplementedException();
		}

		public long DnsCountA()
		{
			throw new NotImplementedException();
		}

		public string DnsIpToName(IPAddress source)
		{
			throw new NotImplementedException();
		}

		public void RememberDnsRecord(DnsRecord record)
		{
			throw new NotImplementedException();
		}

		public bool TestForIp(IPAddress iP)
		{
			throw new NotImplementedException();
		}

	}
}