__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"


from django import forms
from django.urls import reverse_lazy

from common.forms import HTMXDynSelWidget

from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Div, Field, ButtonHolder, Submit

from .models import Funder, Grant, IndividualBudget

from dal import autocomplete

from scipost.forms import HttpRefererFormMixin
from scipost.models import Contributor
from organizations.models import Organization

from .models import Funder, Grant


class FunderRegistrySearchForm(forms.Form):
    name = forms.CharField(max_length=128)


class FunderForm(forms.ModelForm):
    class Meta:
        model = Funder
        fields = ["name", "acronym", "identifier"]


class FunderSelectForm(forms.Form):
    funder = forms.ModelChoiceField(
        queryset=Funder.objects.all(),
        widget=HTMXDynSelWidget(
            url="/funders/funder-autocomplete", attrs={"data-html": True}
        ),
    )


class FunderOrganizationSelectForm(forms.ModelForm):
    organization = forms.ModelChoiceField(
        queryset=Organization.objects.all(),
        widget=autocomplete.ModelSelect2(
            url="/organizations/organization-autocomplete", attrs={"data-html": True}
        ),
    )

    class Meta:
        model = Funder
        fields = []


class GrantForm(HttpRefererFormMixin, forms.ModelForm):
    class Meta:
        model = Grant
        fields = ["funder", "number", "recipient_name", "recipient", "further_details"]

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields["funder"] = forms.ModelChoiceField(
            queryset=Funder.objects.all(),
            widget=HTMXDynSelWidget(url="/funders/funder-autocomplete"),
        )
        self.fields["recipient"] = forms.ModelChoiceField(
            queryset=Contributor.objects.select_related("user").order_by(
                "user__last_name"
            ),
            required=False,
        )


class GrantSelectForm(forms.Form):
    grant = forms.ModelChoiceField(
        queryset=Grant.objects.all(),
        widget=HTMXDynSelWidget(url="/funders/grant-autocomplete"),
    )


class IndividualBudgetForm(forms.ModelForm):
    required_css_class = "required-asterisk"

    class Meta:
        model = IndividualBudget
        fields = [
            "organization",
            "description",
            "holder",
            "budget_number",
            "fundref_id",
        ]
        widgets = {
            "organization": autocomplete.ModelSelect2(
                url=reverse_lazy("organizations:organization-autocomplete"),
                attrs={
                    "data-html": True,
                    "style": "width: 100%",
                },
            ),
            "holder": autocomplete.ModelSelect2(
                url=reverse_lazy("profiles:profile-autocomplete"),
                attrs={
                    "data-html": True,
                    "style": "width: 100%",
                },
            ),
        }

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.layout = Layout(
            Div(
                Div(Field("organization"), css_class="col-12 col-md-6"),
                Div(Field("holder"), css_class="col-12 col-md-6"),
                Div(Field("description"), css_class="col-12"),
                Div(Field("budget_number"), css_class="col-12 col-md"),
                Div(Field("fundref_id"), css_class="col-12 col-md"),
                css_class="row",
            ),
            ButtonHolder(Submit("submit", "Submit", css_class="btn-sm")),
        )