/*
 * hattrick.c: A plugin for the Video Disk Recorder
 *
 * See the README file for copyright information and how to reach the author.
 *
 * Author: Matthias Feistel <hitman_47@users.sourceforge.net>, (C) 2007
 *
 * Copyright: See COPYING file that comes with this distribution
 */


#include "debug.h"
#include "config.h"
#include "timer.h"
#include "net_hattrickconnector.h"
#include "settings.h"
#include <vdr/skins.h>


cTimerThread::cTimerThread()
        :cThread("Hattrick_Live_Timer")
{}


void cTimerThread::Init()
{
	rlog << "cTimerThread::Init()";
	
    cHattrickConnector ht;

    if( ht.LoadHattrickData() == 0 )  // login erfolgreich?
    {
    	rlog << "starting timer thread";
    	
        // Thread starten
        Start();
    }

}


void cTimerThread::Stop()
{
    // Thread starten
    Cancel(3);
}


void cTimerThread::Action()
{
    rlog << "TIMEReintritt";
    while ( Running() )
    {
        bool IsNewData = false;

        rlog << "TIMER";
        cCondWait::SleepMs(REFRESHINTERVAL);

        // Die erste Abfrage darf erst nach 60 Sekunden erfolgen,
        // da wir mittels addLiveMatch bereits Daten erhalten haben.
        // do we need new data?

        // nahegelegendste Spielzeit der vorhandenen Matches ermitteln:
        std::map<long, cTeamData> TeamdataMap;
        std::map<const long, cTeamData>::iterator el;
        cTeamData teamdata;
        time_t tim = time(0);

        TeamdataMap = cSettings::GetInstance( ).GetTeamContainer( );

        if(TeamdataMap.empty( ) )
            return;

        for (el = TeamdataMap.begin(); el != TeamdataMap.end(); ++el)
        {
            rlog << "for-Schleife: TeamdataMap";
            teamdata = el->second;

            // 4 Minuten vor Spielbeginn bei Hattrick einloggen (wir muessen davon ausgehen, dass das vorherige Cookie ungueltig geworden ist, weil es zu lange nicht genutzt wurde.
            if( ( tim > teamdata.time_nextMatch - 5 * 60 ) && ( tim < teamdata.time_nextMatch - 4 * 60 ) )
            {
                rlog << "TIMER HT-Login";
                cHattrickConnector ht;
                ht.LoadHattrickData();
            }
            // 3 Minuten vor Spielbeginn, werden die LiveDaten minuetlich abgeholt
            // 108 Minuten nach Spielbeginn wird das Abholen der Livedaten wieder eingestellt
            if( ( tim > teamdata.time_nextMatch - 3 * 60 ) && ( tim < teamdata.time_nextMatch + 109 * 60 ) )
            {
                rlog << "TIMER BEGINS";
                IsNewData = true;
            }

        }

        if( IsNewData )
        {
            rlog << "GETNEWDATA";
            cHattrickConnector hc;
            hc.Live( );
        }

    }
}


void cTimerThread::OsdMessage( const char *message, bool error )
{
    if (error)
    {
        // Use Skins.QueueMessage
        Skins.QueueMessage( mtError, tr(message) );
    }
}

