import random
from datetime import date, timedelta
from django.core.management.base import BaseCommand
from faker import Faker
from fleet.models import Stroj
from kupci.models import Kupac

class Command(BaseCommand):
    help = 'Popunjava bazu podataka isključivo Liebherr strojevima koristeći Faker'

    def add_arguments(self, parser):
        parser.add_argument(
            'total', 
            type=int, 
            help='Broj Liebherr strojeva koje želiš kreirati',
            default=10
        )

    def handle(self, *args, **kwargs):
        total = kwargs['total']
        fake = Faker(['hr_HR']) # Koristimo hrvatski lokalitet
        kupci = list(Kupac.objects.all())

        if not kupci:
            self.stdout.write(self.style.ERROR("Greška: Nema kupaca u bazi. Prvo pokreni populate_kupci!"))
            return

        # Katalog usklađen s tvojim TIP_STROJA choices
        liebherr_katalog = {
            'dizalica_toranj': [
                '132 EC-H 8 Litronic', 
                '280 EC-H 12', 
                '81 K.1', 
                '172 EC-B 8'
            ],
            'dizalica_auto': [
                'LTM 1030-2.1', 
                'LTM 1050-3.1', 
                'LTM 1060-3.1', 
                'LTM 1120-4.1', 
                'LTC 1050-3.1'
            ]
        }

        self.stdout.write(self.style.MIGRATE_HEADING(f'🚀 Generiram {total} Liebherr strojeva...'))

        created_count = 0
        for _ in range(total):
            # Odabir tipa (usklađeno s tvojim modelom)
            tip = random.choice(['dizalica_toranj', 'dizalica_auto'])
            model_naziv = random.choice(liebherr_katalog[tip])
            
            # Faker za generiranje serijskog broja i registracije
            serijski = f"LE-{fake.bothify(text='######')}" # npr. LE-482931
            
            # Registracija samo za autodizalice (Faker format)
            reg = None
            if tip == 'dizalica_auto':
                # Generira format sličan ZG-1234-LH
                reg = f"ZG-{fake.numerify('####')}-LH"
            
            # Radni sati
            sati = random.uniform(500.0, 12000.0) if tip == 'dizalica_toranj' else random.uniform(100.0, 5000.0)
            
            # Faker za datume (unutar zadnjih godinu dana)
            datum_atesta = fake.date_between(start_date='-1y', end_date='today')

            try:
                Stroj.objects.create(
                    vlasnik=random.choice(kupci),
                    naziv=f"Liebherr {model_naziv}",
                    serijski_broj=serijski,
                    marka='Liebherr',
                    model_stroja=model_naziv,
                    godina_proizvodnje=random.randint(2015, 2024),
                    tip=tip,
                    radni_sati=round(sati, 2),
                    registracija=reg,
                    datum_zadnjeg_atesta=datum_atesta
                )
                created_count += 1
            except Exception as e:
                self.stderr.write(f"Greška kod S/N {serijski}: {e}")
                continue

        self.stdout.write(self.style.SUCCESS(f'✅ Uspješno dodano {created_count} Liebherr strojeva!'))