from django.core.management.base import BaseCommand
from django.db import transaction
from stiftung.models import Land, Verpachtung, Paechter
import logging

logger = logging.getLogger(__name__)

class Command(BaseCommand):
    help = 'Migriert bestehende Verpachtungen in die neue Land-Struktur'

    def add_arguments(self, parser):
        parser.add_argument(
            '--dry-run',
            action='store_true',
            help='Zeigt nur an, was gemacht würde, ohne Änderungen zu speichern',
        )

    def handle(self, *args, **options):
        dry_run = options['dry_run']
        
        if dry_run:
            self.stdout.write(self.style.WARNING('DRY RUN - Keine Änderungen werden gespeichert!'))
        
        # Alle aktiven Verpachtungen finden
        aktive_verpachtungen = Verpachtung.objects.filter(status='aktiv')
        
        self.stdout.write(f'Gefunden: {aktive_verpachtungen.count()} aktive Verpachtungen')
        
        migrated_count = 0
        skipped_count = 0
        
        with transaction.atomic():
            for verpachtung in aktive_verpachtungen:
                land = verpachtung.land
                
                # Prüfen ob bereits migriert
                if land.aktueller_paechter is not None:
                    self.stdout.write(
                        self.style.WARNING(
                            f'Übersprungen: {land} hat bereits einen aktuellen Pächter'
                        )
                    )
                    skipped_count += 1
                    continue
                
                # Migration durchführen
                self.stdout.write(f'Migriere: {land} -> {verpachtung.paechter}')
                
                if not dry_run:
                    # Pächter-Daten ins Land übertragen
                    land.aktueller_paechter = verpachtung.paechter
                    land.paechter_name = verpachtung.paechter.get_full_name()
                    land.paechter_anschrift = self._get_paechter_anschrift(verpachtung.paechter)
                    land.pachtbeginn = verpachtung.pachtbeginn
                    land.pachtende = verpachtung.pachtende
                    land.verlaengerung_klausel = bool(verpachtung.verlaengerung)
                    
                    # Pachtzins übertragen
                    land.pachtzins_pauschal = verpachtung.pachtzins_jaehrlich
                    
                    # Verpachtete Fläche aktualisieren (falls nicht gesetzt)
                    if land.verp_flaeche_aktuell == 0:
                        land.verp_flaeche_aktuell = verpachtung.verpachtete_flaeche
                    
                    land.save()
                
                migrated_count += 1
        
        if dry_run:
            self.stdout.write(
                self.style.SUCCESS(
                    f'DRY RUN abgeschlossen: {migrated_count} Verpachtungen würden migriert, {skipped_count} übersprungen'
                )
            )
        else:
            self.stdout.write(
                self.style.SUCCESS(
                    f'Migration abgeschlossen: {migrated_count} Verpachtungen migriert, {skipped_count} übersprungen'
                )
            )
    
    def _get_paechter_anschrift(self, paechter):
        """Erstellt eine Anschrift aus den Pächter-Daten"""
        parts = []
        if paechter.strasse:
            parts.append(paechter.strasse)
        if paechter.plz and paechter.ort:
            parts.append(f"{paechter.plz} {paechter.ort}")
        elif paechter.ort:
            parts.append(paechter.ort)
        
        return '\n'.join(parts) if parts else ''
