"""
Migriert Legacy-Pachtdaten von Land-Feldern zu LandVerpachtung-Einträgen.

Die alte Struktur speichert Pachtdaten direkt auf dem Land-Model
(aktueller_paechter, pachtbeginn, pachtende, etc.).
Die neue Struktur nutzt das LandVerpachtung-Model (1:n).
"""

from decimal import Decimal

from django.core.management.base import BaseCommand
from django.db import transaction

from stiftung.models import Land, LandVerpachtung


class Command(BaseCommand):
    help = "Migriert Land-Pachtfelder zu LandVerpachtung-Einträgen"

    def add_arguments(self, parser):
        parser.add_argument(
            "--dry-run",
            action="store_true",
            help="Zeigt nur an, was gemacht würde",
        )

    def handle(self, *args, **options):
        dry_run = options["dry_run"]

        lands = Land.objects.filter(
            aktueller_paechter__isnull=False,
        ).select_related("aktueller_paechter")

        self.stdout.write(f"Land-Einträge mit aktueller_paechter: {lands.count()}")

        created = 0
        skipped = 0

        with transaction.atomic():
            for land in lands:
                # Skip if LandVerpachtung already exists for this land+paechter
                existing = LandVerpachtung.objects.filter(
                    land=land, paechter=land.aktueller_paechter
                ).exists()
                if existing:
                    self.stdout.write(
                        self.style.WARNING(f"  Übersprungen: {land} (bereits migriert)")
                    )
                    skipped += 1
                    continue

                vertragsnummer = f"LEGACY-{land.lfd_nr}"
                verpachtete_flaeche = land.verp_flaeche_aktuell or land.groesse_qm or Decimal("1.00")
                pachtzins = land.pachtzins_pauschal or Decimal("0.00")

                self.stdout.write(
                    f"  Migriere: {land} -> {land.aktueller_paechter} "
                    f"(Beginn={land.pachtbeginn}, Ende={land.pachtende}, "
                    f"Fläche={verpachtete_flaeche}qm, Pachtzins={pachtzins}€)"
                )

                if not dry_run:
                    LandVerpachtung.objects.create(
                        land=land,
                        paechter=land.aktueller_paechter,
                        vertragsnummer=vertragsnummer,
                        pachtbeginn=land.pachtbeginn or land.erstellt_am.date(),
                        pachtende=land.pachtende,
                        verlaengerung_klausel=land.verlaengerung_klausel,
                        verpachtete_flaeche=verpachtete_flaeche,
                        pachtzins_pauschal=pachtzins,
                        pachtzins_pro_ha=land.pachtzins_pro_ha,
                        zahlungsweise=land.zahlungsweise or "jaehrlich",
                        ust_option=land.ust_option,
                        ust_satz=land.ust_satz or Decimal("19.00"),
                        grundsteuer_umlage=land.grundsteuer_umlage,
                        versicherungen_umlage=land.versicherungen_umlage,
                        verbandsbeitraege_umlage=land.verbandsbeitraege_umlage,
                        jagdpacht_anteil_umlage=land.jagdpacht_anteil_umlage,
                        status="aktiv",
                        bemerkungen=f"Automatisch migriert aus Land-Feldern (Lfd.Nr. {land.lfd_nr})",
                    )
                    created += 1

        action = "würden erstellt" if dry_run else "erstellt"
        self.stdout.write(
            self.style.SUCCESS(
                f"\n{created} LandVerpachtung-Einträge {action}, {skipped} übersprungen."
            )
        )
