package de.jeyp91.apifootball;

import com.google.common.io.Resources;
import de.jeyp91.BaseMatch;
import de.jeyp91.gists.GistProvider;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

import java.io.IOException;
import java.net.URL;
import java.nio.charset.StandardCharsets;

public class APIFootballMatch extends BaseMatch {

    private final int season;
    private final int matchId;
    private final int leagueId;
    private String matchStatus;
    private final String teamNameHome;
    private final String teamNameGuest;

    public APIFootballMatch(JSONObject json, int season) {
        this.season = season;
        this.matchId = Integer.parseInt(json.get("fixture_id").toString());
        // TODO
        this.leagueId = Integer.parseInt(json.get("league_id").toString());
        this.teamIdHome = Integer.parseInt(((JSONObject) json.get("homeTeam")).get("team_id").toString());
        this.teamIdGuest = Integer.parseInt(((JSONObject) json.get("awayTeam")).get("team_id").toString());
        this.teamNameHome = ((JSONObject) json.get("homeTeam")).get("team_name").toString();
        this.teamNameGuest = ((JSONObject) json.get("awayTeam")).get("team_name").toString();
        this.goalsHome = getNumberOrNull(json.get("goalsHomeTeam"));
        this.goalsGuest = getNumberOrNull(json.get("goalsAwayTeam"));
        this.matchday = getMatchdayFromRoundString(json.get("round").toString(), this.leagueId);
        this.matchStatus = json.get("statusShort").toString();
        this.matchDatetime = (String) json.get("event_date");
    }

    public int getAPIFootBallMatchID() {
        return this.matchId;
    }

    private int getMatchdayFromRoundString(String round, int leagueId) {
        round = round.replace(" ", "_");
        Integer matchday = null;
        APIFootballConnector con = APIFootballConnector.getAPIFootballConnectorInstance(this.season);
        JSONObject roundsObject = con.getMatchdays(leagueId);
        JSONArray roundsArray = (JSONArray)(((JSONObject) roundsObject.get("api")).get("fixtures"));
        for (int i = 0; i < roundsArray.size(); i++) {
            if(roundsArray.get(i).toString().equals(round)) {
                matchday = i + 1;
                break;
            }
        }
        return matchday;
    }

    private Integer getNumberOrNull(Object object) {
        return object != null ? Integer.parseInt(object.toString()) : null;
    }

    public String getTeamNameHome() {
        return this.teamNameHome;
    }

    public String getTeamNameGuest() {
        return this.teamNameGuest;
    }
}
