var interval;
var hasStarted = false;
var hasBeenAlerted = false;
var id = '';
var leagueid = '';
window.onload = ()=>
{
    startSpinner();
    const urlParams = new URLSearchParams(window.location.search);
    const entries = urlParams.entries();
    const params = {};
    for (entry of entries) 
    {
        params[entry[0]] = entry[1];
    }
    id = params[id];
    leagueid = params[leagueid]
}
function startSpinner()
{
    var interval = setInterval(() => {
        if(hasStarted)
        {
            document.getElementById('spinner').classList.add('active');
            clearInterval(interval);
        }
    }, 10);
}
function stopSpinner()
{
    document.getElementById('spinner').classList.remove('active')
}
async function start() 
{
    if(hasBeenAlerted) hasBeenAlerted = false;
    if(hasStarted) return console.log("Once is enough.")
    hasStarted = true;
    var isUp = await checkStatus();
    if(!isUp) return hasStarted = false;
    console.log(isUp, hasStarted)
    interval = setInterval(() => 
    {
        fetch('https://127.0.0.1:2999/GetLiveclientdataAllgamedata',
        {
            method:"GET",
            mode:"cors",
            headers:
            {
                "Access-Control-Allow-Methods": "*"
            }
        }).then(handleRes)
        .then(handleData)
        .catch(handleError)
        async function handleRes(res)
        {
            return await res.json()
        }
        function handleError(error)
        {
            return {Error:'There was an error:'+error}
        }
    }, 100);
}

async function checkStatus()
{
    var x = await fetch('https://127.0.0.1:2999/help',
    {
        method:"GET",
        mode:"cors",
        option:
        {
            timeout:100
        },
        headers:
        {
            "Access-Control-Allow-Methods": "*"
        }
    }).then(handleRes)
    .catch(handleError)
    async function handleRes(res)
    {
        return {Error:false};
    }
    function handleError(error)
    {
        return {Error:'There was an error:'+error}
    }
    return x.Error?false:true;
}
async function handleData(data)
{
    if(data.allPlayers.length!=2) return reset('Unqualified match, not enough players.');
    var playerA = data.allPlayers[0].summonerName;
    var playerB = data.allPlayers[1].summonerName;
    //if(data.allPlayers[0].scores.creepScore>=100 || data.allPlayers[1].scores.creepScore>=100) return  handleResults(data.allPlayers[0].scores.creepScore==100?playerA:playerB, data)
    if(data.events.Events.length==2) return;
    data.events.Events.forEach(Event => 
        {
            if(Event.EventName =="FirstBlood" || Event.EventName =="FirstBrick") return handleResults(Event, data);
        });
    if(data.allPlayers[0].scores.creepScore>=100 && data.allPlayers[1].scores.creepScore>=100) return  handleTie(data)
}
function RegisterGame(result,data)
{
    stopSpinner();
    const PA = data.allPlayers[0]; //Player A
    const PB = data.allPlayers[1]; //Player B 
    if(!result.tie)
    {
        result = {
            winCondition:result.EventName,
            winner:result.EventName=='FirstBrick'?result.KillerName:result.Recipient
        }
    }
    else
    {
        result= {
            winCondition:'Tie',
            winner:'Tie'
        }
    }

    fetch(`${window.location.origin}/api/RegisterGame`, 
    {
        method: "POST",
        mode: "cors", 
        headers:{
            'Content-Type': 'application/json',
            'Accept': 'application/json', 
            'id':id,
            'leagueid':leagueid
        },
        body:JSON.stringify({
            result,
            gameData:
            {
                PlayerA:
                    {
                        championName:PA.championName,
                        summonerName: PA.summonerName, 
                        isBot: PA.isBot, 
                        team: PA.team,
                        items:PA.items,
                        level:PA.level,
                        runes:PA.runes,
                        skin:PA.skinID,
                        skinName:PA.skinName,
                        summs:PA.summonerSpells,
                        Kills:PA.scores.kills,
                        Deaths:PA.scores.deaths,
                        CS:PA.scores.creepScore
                    },
                PlayerB:
                    {
                        championName:PB.championName,
                        summonerName: PB.summonerName, 
                        isBot: PB.isBot, 
                        team: PB.team,
                        items:PB.items,
                        level:PB.level,
                        runes:PB.runes,
                        skin:PB.skinID,
                        skinName:PB.skinName,
                        summs:PB.summonerSpells,
                        Kills:PB.scores.kills,
                        Deaths:PB.scores.deaths,
                        CS:PB.scores.creepScore
                    },
                gameTime:data.gameData.gameTime
            },
            fullData:data,
        })
    }) 
    .then(result => result.json())
    .then(res => 
    {
        if(res.success)
        {
            location.href = '/leagues'
        }
        else alert(res.Error);  
    })
    .catch(console.error);
}

function reset(reason)
{
    if(!hasBeenAlerted) alert(reason);
    hasBeenAlerted=true;
    clearInterval(interval);
    hasStarted=false;
}

function handleResults(result, data)
{
    //If it gets here there is already a clear winner.
    clearInterval(interval)
    var costumEvent = {
        "EventID": 5000,
        "EventName": "100th creep",
        "EventTime": data.gameData.gameTime,
        "Recipient": '',
    }
    if(result == 'string') 
    {
        let cache = result;
        result= costumEvent;
        result.Recipient = cache
    }
    RegisterGame(result, data)
}

function handleTie(data)
{
    var result = {
        tie:true,
    }
    RegisterGame(result,data)
}