from django import forms

from ..models import Land, LandAbrechnung, LandVerpachtung, Paechter


class LandForm(forms.ModelForm):
    """Form für das Erstellen und Bearbeiten von Ländern"""

    class Meta:
        model = Land
        fields = [
            # Grundlegende Identifikation
            "lfd_nr",
            "ew_nummer",
            "grundbuchblatt",
            # Gerichtliche Zuständigkeit
            "amtsgericht",
            # Verwaltungsstruktur
            "gemeinde",
            "gemarkung",
            "flur",
            "flurstueck",
            "adresse",
            "alkis_kennzeichen",
            # Flächenangaben
            "groesse_qm",
            "gruenland_qm",
            "acker_qm",
            "wald_qm",
            "sonstiges_qm",
            # Legacy Verpachtung (für Kompatibilität)
            "verpachtete_gesamtflaeche",
            "flaeche_alte_liste",
            "verp_flaeche_aktuell",
            # Aktuelle Verpachtung
            "aktueller_paechter",
            "paechter_name",
            "paechter_anschrift",
            "pachtbeginn",
            "pachtende",
            "verlaengerung_klausel",
            "zahlungsweise",
            "pachtzins_pro_ha",
            "pachtzins_pauschal",
            # Umsatzsteuer
            "ust_option",
            "ust_satz",
            # Umlagen
            "grundsteuer_umlage",
            "versicherungen_umlage",
            "verbandsbeitraege_umlage",
            "jagdpacht_anteil_umlage",
            # Legacy Steuern
            "anteil_grundsteuer",
            "anteil_lwk",
            # Status
            "aktiv",
            "notizen",
        ]
        widgets = {
            # Grundlegende Identifikation
            "lfd_nr": forms.TextInput(attrs={"class": "form-control"}),
            "ew_nummer": forms.TextInput(attrs={"class": "form-control"}),
            "grundbuchblatt": forms.TextInput(attrs={"class": "form-control"}),
            # Gerichtliche Zuständigkeit
            "amtsgericht": forms.TextInput(attrs={"class": "form-control"}),
            # Verwaltungsstruktur
            "gemeinde": forms.TextInput(attrs={"class": "form-control"}),
            "gemarkung": forms.TextInput(attrs={"class": "form-control"}),
            "flur": forms.TextInput(attrs={"class": "form-control"}),
            "flurstueck": forms.TextInput(attrs={"class": "form-control"}),
            "adresse": forms.TextInput(attrs={"class": "form-control"}),
            # Flächenangaben
            "groesse_qm": forms.NumberInput(
                attrs={"class": "form-control", "step": "0.01"}
            ),
            "gruenland_qm": forms.NumberInput(
                attrs={"class": "form-control", "step": "0.01"}
            ),
            "acker_qm": forms.NumberInput(
                attrs={"class": "form-control", "step": "0.01"}
            ),
            "wald_qm": forms.NumberInput(
                attrs={"class": "form-control", "step": "0.01"}
            ),
            "sonstiges_qm": forms.NumberInput(
                attrs={"class": "form-control", "step": "0.01"}
            ),
            # Legacy Verpachtung
            "verpachtete_gesamtflaeche": forms.NumberInput(
                attrs={"class": "form-control", "step": "0.01"}
            ),
            "flaeche_alte_liste": forms.NumberInput(
                attrs={"class": "form-control", "step": "0.01"}
            ),
            "verp_flaeche_aktuell": forms.NumberInput(
                attrs={"class": "form-control", "step": "0.01"}
            ),
            # Aktuelle Verpachtung
            "aktueller_paechter": forms.Select(attrs={"class": "form-select"}),
            "paechter_name": forms.TextInput(attrs={"class": "form-control"}),
            "paechter_anschrift": forms.Textarea(
                attrs={"class": "form-control", "rows": 3}
            ),
            "pachtbeginn": forms.DateInput(
                attrs={"class": "form-control", "type": "date"}
            ),
            "pachtende": forms.DateInput(
                attrs={"class": "form-control", "type": "date"}
            ),
            "verlaengerung_klausel": forms.CheckboxInput(
                attrs={"class": "form-check-input"}
            ),
            "zahlungsweise": forms.Select(attrs={"class": "form-select"}),
            "pachtzins_pro_ha": forms.NumberInput(
                attrs={"class": "form-control", "step": "0.01"}
            ),
            "pachtzins_pauschal": forms.NumberInput(
                attrs={"class": "form-control", "step": "0.01"}
            ),
            # Umsatzsteuer
            "ust_option": forms.CheckboxInput(attrs={"class": "form-check-input"}),
            "ust_satz": forms.NumberInput(
                attrs={"class": "form-control", "step": "0.01"}
            ),
            # Umlagen
            "grundsteuer_umlage": forms.CheckboxInput(
                attrs={"class": "form-check-input"}
            ),
            "versicherungen_umlage": forms.CheckboxInput(
                attrs={"class": "form-check-input"}
            ),
            "verbandsbeitraege_umlage": forms.CheckboxInput(
                attrs={"class": "form-check-input"}
            ),
            "jagdpacht_anteil_umlage": forms.CheckboxInput(
                attrs={"class": "form-check-input"}
            ),
            # Legacy
            "anteil_grundsteuer": forms.NumberInput(
                attrs={"class": "form-control", "step": "0.01"}
            ),
            "anteil_lwk": forms.NumberInput(
                attrs={"class": "form-control", "step": "0.01"}
            ),
            # Status
            "aktiv": forms.CheckboxInput(attrs={"class": "form-check-input"}),
            "notizen": forms.Textarea(attrs={"class": "form-control", "rows": 3}),
        }


class LandVerpachtungForm(forms.ModelForm):
    """Form für das Erstellen und Bearbeiten von Verpachtungen"""

    class Meta:
        model = LandVerpachtung
        fields = [
            'land',
            'paechter',
            'vertragsnummer',
            'pachtbeginn',
            'pachtende',
            'verlaengerung_klausel',
            'verpachtete_flaeche',
            'pachtzins_pauschal',
            'pachtzins_pro_ha',
            'zahlungsweise',
            'ust_option',
            'ust_satz',
            'grundsteuer_umlage',
            'versicherungen_umlage',
            'verbandsbeitraege_umlage',
            'jagdpacht_anteil_umlage',
            'status',
            'bemerkungen'
        ]
        widgets = {
            'land': forms.Select(attrs={'class': 'form-select'}),
            'paechter': forms.Select(attrs={'class': 'form-select'}),
            'vertragsnummer': forms.TextInput(attrs={'class': 'form-control'}),
            'pachtbeginn': forms.DateInput(attrs={'class': 'form-control', 'type': 'date'}),
            'pachtende': forms.DateInput(attrs={'class': 'form-control', 'type': 'date'}),
            'verlaengerung_klausel': forms.CheckboxInput(attrs={'class': 'form-check-input'}),
            'verpachtete_flaeche': forms.NumberInput(attrs={'class': 'form-control', 'step': '0.01'}),
            'pachtzins_pauschal': forms.NumberInput(attrs={'class': 'form-control', 'step': '0.01'}),
            'pachtzins_pro_ha': forms.NumberInput(attrs={'class': 'form-control', 'step': '0.01'}),
            'zahlungsweise': forms.Select(attrs={'class': 'form-select'}),
            'ust_option': forms.CheckboxInput(attrs={'class': 'form-check-input'}),
            'ust_satz': forms.NumberInput(attrs={'class': 'form-control', 'step': '0.01'}),
            'grundsteuer_umlage': forms.CheckboxInput(attrs={'class': 'form-check-input'}),
            'versicherungen_umlage': forms.CheckboxInput(attrs={'class': 'form-check-input'}),
            'verbandsbeitraege_umlage': forms.CheckboxInput(attrs={'class': 'form-check-input'}),
            'jagdpacht_anteil_umlage': forms.CheckboxInput(attrs={'class': 'form-check-input'}),
            'status': forms.Select(attrs={'class': 'form-select'}),
            'bemerkungen': forms.Textarea(attrs={'class': 'form-control', 'rows': 3}),
        }


class LandAbrechnungForm(forms.ModelForm):
    """Form für das Erstellen und Bearbeiten von Landabrechnungen"""

    class Meta:
        model = LandAbrechnung
        fields = [
            "land",
            "abrechnungsjahr",
            # Einnahmen
            "pacht_vereinnahmt",
            "umlagen_vereinnahmt",
            "sonstige_einnahmen",
            # Ausgaben
            "grundsteuer_bescheid_nr",
            "grundsteuer_betrag",
            "versicherungen_betrag",
            "verbandsbeitraege_betrag",
            "sonstige_abgaben_betrag",
            "instandhaltung_betrag",
            "verwaltung_recht_betrag",
            # Umsatzsteuer
            "vorsteuer_aus_umlagen",
            # Sonstiges
            "offene_posten",
            "bemerkungen",
            # Dokumente werden über Paperless verknüpft, nicht hochgeladen
        ]
        widgets = {
            "land": forms.Select(attrs={"class": "form-select"}),
            "abrechnungsjahr": forms.NumberInput(
                attrs={"class": "form-control", "min": "2000", "max": "2050"}
            ),
            # Einnahmen
            "pacht_vereinnahmt": forms.NumberInput(
                attrs={"class": "form-control", "step": "0.01"}
            ),
            "umlagen_vereinnahmt": forms.NumberInput(
                attrs={"class": "form-control", "step": "0.01"}
            ),
            "sonstige_einnahmen": forms.NumberInput(
                attrs={"class": "form-control", "step": "0.01"}
            ),
            # Ausgaben
            "grundsteuer_bescheid_nr": forms.TextInput(attrs={"class": "form-control"}),
            "grundsteuer_betrag": forms.NumberInput(
                attrs={"class": "form-control", "step": "0.01"}
            ),
            "versicherungen_betrag": forms.NumberInput(
                attrs={"class": "form-control", "step": "0.01"}
            ),
            "verbandsbeitraege_betrag": forms.NumberInput(
                attrs={"class": "form-control", "step": "0.01"}
            ),
            "sonstige_abgaben_betrag": forms.NumberInput(
                attrs={"class": "form-control", "step": "0.01"}
            ),
            "instandhaltung_betrag": forms.NumberInput(
                attrs={"class": "form-control", "step": "0.01"}
            ),
            "verwaltung_recht_betrag": forms.NumberInput(
                attrs={"class": "form-control", "step": "0.01"}
            ),
            # Umsatzsteuer
            "vorsteuer_aus_umlagen": forms.NumberInput(
                attrs={"class": "form-control", "step": "0.01"}
            ),
            # Sonstiges
            "offene_posten": forms.NumberInput(
                attrs={"class": "form-control", "step": "0.01"}
            ),
            "bemerkungen": forms.Textarea(attrs={"class": "form-control", "rows": 4}),
        }


class PaechterForm(forms.ModelForm):
    """Form für das Erstellen und Bearbeiten von Pächtern"""

    class Meta:
        model = Paechter
        fields = "__all__"
        widgets = {
            "anrede": forms.Select(attrs={"class": "form-select"}),
            "vorname": forms.TextInput(attrs={"class": "form-control"}),
            "nachname": forms.TextInput(attrs={"class": "form-control"}),
            "email": forms.EmailInput(attrs={"class": "form-control"}),
            "telefon": forms.TextInput(attrs={"class": "form-control"}),
            "mobil": forms.TextInput(attrs={"class": "form-control"}),
            "geburtsdatum": forms.DateInput(
                attrs={"class": "form-control", "type": "date"}
            ),
            "strasse": forms.TextInput(attrs={"class": "form-control"}),
            "plz": forms.TextInput(attrs={"class": "form-control"}),
            "ort": forms.TextInput(attrs={"class": "form-control"}),
            "aktiv": forms.CheckboxInput(attrs={"class": "form-check-input"}),
            "notizen": forms.Textarea(attrs={"class": "form-control", "rows": 3}),
        }
