from django import forms

from accounts.models import FifaAccount, PlayerCard
from utils.select2_form_fields import ModelSelect2MultipleWidget, ModelSelect2Widget
from .consts import ConsoleTradeOneQualityName
from .crispy_layouts import StartSinglePlayerTradeFormHelper, ConsoleTradeOneSetQualityFormHelper, \
    ConsoleTradeOneChangeQualityFormHelper, WebTradeAddAccountFormHelper, ConsoleInvestChangeQualityFormHelper
from .models import WebTradeQuality


class StartSinglePlayerTradeForm(forms.Form):
    helper = StartSinglePlayerTradeFormHelper()

    player_card = forms.ModelChoiceField(
        queryset=PlayerCard.objects.all(),
        widget=ModelSelect2Widget(
            queryset=PlayerCard.objects.all(),
            search_fields=['asset_id__contains'])
    )
    fifa_accounts = forms.ModelMultipleChoiceField(
        queryset=FifaAccount.objects.all(),
        widget=ModelSelect2MultipleWidget(
            queryset=FifaAccount.objects.all(),
            search_fields=['user_name__contains'])
    )
    max_bid_price = forms.IntegerField(initial=0)
    sell_start_price = forms.IntegerField(initial=300)
    start_sell_now_price = forms.IntegerField(initial=350)
    end_sell_now_price = forms.IntegerField(initial=0)


class ConsoleTradeOneSetQualityForm(forms.Form):
    helper = ConsoleTradeOneSetQualityFormHelper()

    start_number = forms.IntegerField(initial=0)
    end_number = forms.IntegerField(initial=0)
    quality_name = forms.ChoiceField(choices=ConsoleTradeOneQualityName)
    stock_greater = forms.IntegerField(initial=-1)
    stock_less = forms.IntegerField(initial=-1)

    def clean(self):
        start_number = self.cleaned_data['start_number']
        end_number = self.cleaned_data['end_number']
        quality_name = self.cleaned_data['quality_name']
        if end_number <= start_number:
            self.add_error('start_number', 'Start must more than End')


class ConsoleTradeOneChangeQualityForm(forms.Form):
    helper = ConsoleTradeOneChangeQualityFormHelper()

    pre_quality = forms.ChoiceField(choices=ConsoleTradeOneQualityName, required=True)
    new_quality = forms.ChoiceField(choices=ConsoleTradeOneQualityName, required=True)
    stock_greater = forms.IntegerField(initial=-1)
    stock_less = forms.IntegerField(initial=-1)


class ConsoleInvestChangeQualityForm(forms.Form):
    helper = ConsoleInvestChangeQualityFormHelper()

    new_quality = forms.ChoiceField(choices=ConsoleTradeOneQualityName, required=True)


class WebTradeAddAccountForm(forms.Form):
    helper = WebTradeAddAccountFormHelper()

    accounts_file = forms.FileField(required=True)
    quality = forms.ModelChoiceField(queryset=WebTradeQuality.objects.distinct('name'), required=True)
