import random
from django.core.management.base import BaseCommand
from django.core.exceptions import ValidationError
from faker import Faker
from fleet.models import Vozilo

class Command(BaseCommand):
    help = 'Popunjava bazu podataka s gospodarskim vozilima koristeći Faker'

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

    def handle(self, *args, **kwargs):
        total = kwargs['total']
        fake = Faker(['hr_HR'])
        
        # Modeli koji se pojavljuju u tvom radnom nalogu (CSV)
        modeli_podaci = [
            'VW Transporter T6',
            'Mercedes-Benz Vito',
            'Citroen Jumper',
            'Ford Transit Custom',
            'Renault Kangoo Maxi',
            'Peugeot Boxer',
            'Opel Vivaro',
        ]

        self.stdout.write(self.style.MIGRATE_HEADING(f'🚀 Kreiram {total} vozila u flotu...'))

        brojac = 0
        while brojac < total:
            model_naziv = random.choice(modeli_podaci)
            
            # Generiranje registracije koristeći Faker numerify/bothify
            # Format: ZG 1234 AB
            gradovi = ['ZG', 'ST', 'RI', 'OS', 'VZ', 'PU', 'KA', 'KC']
            grad = random.choice(gradovi)
            reg_oznaka = fake.numerify(text='####') # npr. 6732
            reg_slova = fake.bothify(text='??', letters='ABCDEFGHIJKLMNOPQRSTUVWXYZ') # npr. II
            registracija = f"{grad}{reg_oznaka}{reg_slova}"
            
            # Kilometri: Koristimo tvoju logiku da trenutni budu veći od početnih
            pocetni = random.randint(0, 150000)
            dodatni = random.randint(500, 20000)
            trenutni = pocetni + dodatni

            try:
                # Koristimo registraciju u nazivu radi lakšeg prepoznavanja u Astro frontendu
                vozilo = Vozilo.objects.create(
                    naziv=f"{model_naziv} ({grad})",
                    registracija=registracija,
                    pocetni_kilometri=pocetni,
                    trenutni_kilometri=trenutni,
                    status=random.choice(['aktivan', 'aktivan', 'servis', 'neaktivan'])
                )
                brojac += 1
                self.stdout.write(f"  ✅ Kreirano: {vozilo.naziv} [{vozilo.registracija}]")
                
            except ValidationError:
                # Ako Faker pogodi postojeću registraciju, samo nastavi dalje
                continue
            except Exception as e:
                self.stderr.write(f"  ❌ Greška: {e}")
                break

        self.stdout.write(self.style.SUCCESS(f'\nGotovo! Uspješno dodano {brojac} vozila u flotu.'))