from django import forms
from .models import Season, Playerregister, Reallifeteam

class GameStatsForm(forms.Form):
    season = forms.ChoiceField(label="Season", choices=[], required=True)
    home_team = forms.ChoiceField(label="Home Team", choices=[], required=True)
    away_team = forms.ChoiceField(label="Away Team", choices=[], required=True)
    game_date = forms.DateField(label="Game Date", widget=forms.SelectDateWidget, required=True)

    home_goalkeeper = forms.ChoiceField(label="Home Goalkeeper", choices=[], required=True)
    away_goalkeeper = forms.ChoiceField(label="Away Goalkeeper", choices=[], required=True)

    final_home_score = forms.IntegerField(label="Home Score", min_value=0, required=True)
    final_away_score = forms.IntegerField(label="Away Score", min_value=0, required=True)

    home_two_keepers = forms.BooleanField(label="Home Used Two Goalkeepers", required=False)
    away_two_keepers = forms.BooleanField(label="Away Used Two Goalkeepers", required=False)

    # Fields for tracking events
    goal_minute = forms.IntegerField(label="Goal Minute", min_value=1, max_value=120, required=False)
    goal_team = forms.ChoiceField(label="Goal Team", choices=[], required=False)
    goal_scorer = forms.ChoiceField(label="Goal Scorer", choices=[], required=False)
    goal_penalty = forms.BooleanField(label="Penalty Kick", required=False)

    yellow_minute = forms.IntegerField(label="Yellow Card Minute", min_value=1, max_value=120, required=False)
    yellow_team = forms.ChoiceField(label="Yellow Card Team", choices=[], required=False)
    yellow_player = forms.ChoiceField(label="Yellow Card Player", choices=[], required=False)

    red_minute = forms.IntegerField(label="Red Card Minute", min_value=1, max_value=120, required=False)
    red_team = forms.ChoiceField(label="Red Card Team", choices=[], required=False)
    red_player = forms.ChoiceField(label="Red Card Player", choices=[], required=False)

    penalty_minute = forms.IntegerField(label="Penalty Minute", min_value=1, max_value=120, required=False)
    penalty_team = forms.ChoiceField(label="Penalty Team", choices=[], required=False)
    penalty_scorer = forms.ChoiceField(label="Penalty Scorer", choices=[], required=False)
    penalty_keeper = forms.ChoiceField(label="Penalty Keeper", choices=[], required=False)
    penalty_goal = forms.BooleanField(label="Penalty Scored", required=False)

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.fields['season'].choices = [(s.year_code, s.name) for s in Season.objects.all()]
        self.fields['home_team'].choices = [(t.id, t.name) for t in Reallifeteam.objects.all()]
        self.fields['away_team'].choices = [(t.id, t.name) for t in Reallifeteam.objects.all()]
        self.fields['goal_team'].choices = self.fields['yellow_team'].choices = self.fields['red_team'].choices = self.fields['penalty_team'].choices = [(t.id, t.name) for t in Reallifeteam.objects.all()]

        players = [(p.player_id, (p.firstname or "") + (" " + p.lastname if p.lastname else "")) for p in Playerregister.objects.all()]
        self.fields['goal_scorer'].choices = players
        self.fields['yellow_player'].choices = players
        self.fields['red_player'].choices = players
        self.fields['penalty_scorer'].choices = players
        self.fields['penalty_keeper'].choices = [(p.player_id, (p.firstname or "") + (" " + p.lastname if p.lastname else "")) for p in Playerregister.objects.filter(position="Goalkeeper")]

    def clean(self):
        cleaned_data = super().clean()
        if cleaned_data.get('home_team') == cleaned_data.get('away_team'):
            raise forms.ValidationError("Home and away teams cannot be the same.")
        return cleaned_data
