from datetime import datetime, timedelta
from time import sleep
import pytz
import json
import requests
import sys

def sortevents(leaguedata, league):

    games = []
    haslive = False

    for event in leaguedata['events']:

        event_desc = event['status']['type']['shortDetail']  # use this to display time and quarter on ticker
        event_date = event['date'].split('T')[0]
        event_liveOrNot = event['status']['type']['state'] # use this to determine if game has ended or not
        if event_liveOrNot == 'in':
            haslive = True
        has_live = 'has_live'
        no_upcoming = 'no_upcoming'

        for home_away in event['competitions']:
            for home_away2 in home_away['competitors']:
                if home_away2['homeAway'] == 'away':
                    if home_away2['team']['displayName'] == 'Washington Commanders':
                        away_team = 'Washington'
                    else:
                        away_team = home_away2['team']['displayName']
                    away_score = home_away2['score']
                else:
                    if home_away2['team']['displayName'] == 'Washington Commanders':
                        home_team = 'Washington'
                    else:
                        home_team = home_away2['team']['displayName']
                    home_score = home_away2['score']

        if datetime.now(pytz.utc).strftime("%Y-%m-%d") == event['date'].split('T')[0] or event['date'].split('T')[0] <= (datetime.strptime(datetime.now(pytz.utc).strftime("%Y-%m-%dT%H:%MZ"), "%Y-%m-%dT%H:%MZ") + timedelta(days=1)).strftime("%Y-%m-%dT%H:%MZ").split('T')[0]:
            games.append({
                'home_team': home_team,
                'home_score': home_score,
                'away_team': away_team,
                'away_score': away_score,
                'time': event_desc,
                'date': event_date,
                'isLive': event_liveOrNot
            })
    return games, haslive, has_live, no_upcoming


f = open('csv/live_nba.json', 'r')
all_settings = json.load(f)
f.close()

nba_url = "https://site.api.espn.com/apis/site/v2/sports/basketball/nba/scoreboard"

time_now = datetime.now(pytz.utc)
time_now2 = time_now.strftime("%Y-%m-%dT%H:%MZ")

NBA_live_now = False
NBA_games_today = False
NBA_events = []
NBA_fifteenmin = False
games_happened = False

try:
    nba_response = requests.get(nba_url)
    nba_data = nba_response.json()
except:
    sleep(120)
    nba_response = requests.get(nba_url)
    nba_data = nba_response.json()

for event in nba_data['events']:
    if event['status']['type']['state'] == 'in':
        NBA_live_now = True
    if time_now2.split('T')[0] <= event['date'].split('T')[0] and event['date'].split('T')[0] <= (datetime.strptime(time_now2, "%Y-%m-%dT%H:%MZ") + timedelta(days=1)).strftime("%Y-%m-%dT%H:%MZ").split('T')[0]:
        NBA_events.append(event['date'])
        NBA_games_today = True
        if NBA_live_now is False and ((datetime.strptime(event['date'], "%Y-%m-%dT%H:%MZ") + timedelta(minutes=20)).strftime("%Y-%m-%dT%H:%MZ") >= datetime.now(pytz.utc).strftime("%Y-%m-%dT%H:%MZ")) and (event['date'] <= datetime.now(pytz.utc).strftime("%Y-%m-%dT%H:%MZ")):
            NBA_fifteenmin = True


while True:
    f = open('csv/live_nba.json', 'r')
    all_settings = json.load(f)
    f.close()

    if NBA_live_now:
        try:
            nba_response = requests.get(nba_url)
            nba_data = nba_response.json()
            nba_sorted = sortevents(nba_data, 'NBA')
            all_settings['leagues']['NBA'] = nba_sorted
            games_happened = True

            if nba_sorted[1]:
                NBA_live_now = True
            else:
                NBA_live_now = False         

            f = open('csv/live_nba.json', 'w+')
            json.dump(all_settings, f)
            f.close()

            sleep(120)
        except:
            sleep(120)


    elif NBA_fifteenmin:
        for _ in range (10):
            try:
                nba_response = requests.get(nba_url)
                nba_data = nba_response.json()
                nba_sorted = sortevents(nba_data, 'NBA')
                all_settings['leagues']['NBA'] = nba_sorted

                f = open('csv/live_nba.json', 'w+')
                json.dump(all_settings, f)
                f.close() 
                sleep(120)
            except:
                sleep(120)

        if nba_sorted[1]:
            NBA_live_now = True
            NBA_fifteenmin = False
            games_happened = True                     

        else:
            NBA_live_now = False
            NBA_fifteenmin = False

    else:
        # NBA_events = ['2022-12-06T13:13Z', '2022-12-06T20:30Z', '2022-12-06T21:00Z', '2022-12-06T23:50Z']
        # NFL_events = ['2022-12-05T14:54Z']

        NBA_events2 = []

        try:
            for event in NBA_events:
                if event >= datetime.now(pytz.utc).strftime("%Y-%m-%dT%H:%MZ"):
                    NBA_events2.append(event)
                    NBA_games_today = True
            next_NBA = min(NBA_events2)
            d = datetime.strptime(next_NBA, "%Y-%m-%dT%H:%MZ")
            NBA_time_left = (d - (datetime.strptime(datetime.now(pytz.utc).strftime("%Y-%m-%dT%H:%MZ"), "%Y-%m-%dT%H:%MZ"))).total_seconds()
            all_settings['leagues']['NBA'][3] = next_NBA
            f = open('csv/live_nba.json', 'w+')
            json.dump(all_settings, f)
            f.close()

        except:
            NBA_games_today = False
            next_NBA = []
            all_settings['leagues']['NBA'][3] = 'no_upcoming'
            f = open('csv/live_nba.json', 'w+')
            json.dump(all_settings, f)
            f.close()
            pass   

        if NBA_games_today:
            sleep(NBA_time_left)
            NBA_fifteenmin = True


    if NBA_live_now is False and NBA_games_today is False and games_happened is True:
        sleep(7200)

        all_settings['leagues']['NBA'][2] = 'no_live'
        all_settings['leagues']['NBA'][3] = 'no_upcoming'
        f = open('csv/live_nba.json', 'w+')
        json.dump(all_settings, f)
        f.close()
        break


    if NBA_live_now is False and NBA_games_today is False and games_happened is False:
        all_settings['leagues']['NBA'][2] = 'no_live'
        all_settings['leagues']['NBA'][3] = 'no_upcoming'
        f = open('csv/live_nba.json', 'w+')
        json.dump(all_settings, f)
        f.close()
        break