# -*- coding: utf-8 -*-
from django.core.management.base import BaseCommand
from django.utils import timezone
from datetime import date
from bilal.models import Service, Station, Statistique, PrixCarburant, Actualite


class Command(BaseCommand):
    help = 'Initialize database with Bilal Oil data'

    def handle(self, *args, **options):
        self.stdout.write('🚀 Initialisation des données Bilal Oil...\n')

        # ============ SERVICES ============
        self.stdout.write('📦 Création des services...')
        services_data = [
            {
                'nom': 'Carburants',
                'categorie': 'carburant',
                'description': "BILAL OIL met à la disposition de tous les usagers un choix de carburants alliant performance et qualité. Nous assurons un contrôle strict tout au long de la chaîne d'approvisionnement.",
                'description_courte': 'Des carburants de qualité supérieure avec contrôle strict.',
                'icone': 'fuel',
                'ordre': 1
            },
            {
                'nom': 'Lubrifiants',
                'categorie': 'lubrifiant',
                'description': "Pour assurer une longévité durable des véhicules à moteur, les lubrifiants dédiés à leur entretien doivent être de qualité. Quelle que soit votre activité, vous trouverez chez BILAL OIL des lubrifiants adaptés.",
                'description_courte': 'Lubrifiants adaptés à tous types de véhicules.',
                'icone': 'oil',
                'ordre': 2
            },
            {
                'nom': 'Entretien Automobile',
                'categorie': 'entretien',
                'description': "BILAL OIL vous propose un entretien complet de votre véhicule : parallélisme, vidange, changement de pneus, lavage, entretien.",
                'description_courte': "Service complet d'entretien automobile.",
                'icone': 'wrench',
                'ordre': 3
            },
            {
                'nom': 'Boutique Station',
                'categorie': 'boutique',
                'description': "Profitez de nos boutiques spécialement aménagées pour vous accueillir. Grâce aux nombreuses méthodes de paiement disponibles, vous pouvez faire vos courses.",
                'description_courte': 'Boutiques avec nombreuses méthodes de paiement.',
                'icone': 'shopping',
                'ordre': 4
            },
            {
                'nom': 'Gaz Butane',
                'categorie': 'gaz',
                'description': "Les bouteilles de gaz Bilal oil sont toutes bien remplies et sécurisées à l'aide d'un opercule de sécurisation. Livraison professionnelle disponible.",
                'description_courte': 'Bouteilles de gaz sécurisées et bien remplies.',
                'icone': 'fire',
                'ordre': 5
            },
        ]

        for service_data in services_data:
            service, created = Service.objects.get_or_create(nom=service_data['nom'], defaults=service_data)
            if created:
                self.stdout.write(f"  ✅ {service.nom} (icône: {service.icone})")
            else:
                # Mettre à jour l'icône si elle n'existe pas
                if not service.icone and 'icone' in service_data:
                    service.icone = service_data['icone']
                    service.save()
                    self.stdout.write(f"  🔄 {service.nom} - icône mise à jour: {service.icone}")
                else:
                    self.stdout.write(f"  ⏭️  {service.nom} existe déjà")

        # ============ STATIONS ============
        self.stdout.write('\n🏢 Création des stations...')
        stations_data = [
            {
                'nom': 'Station Bilal Oil Sacré Coeur',
                'adresse': 'Sacré coeur 3',
                'ville': 'Dakar',
                'region': 'Dakar',
                'telephone': '+221 33 867 13 13',
                'email': 'sacrecoeur@bilal-oil.com',
                'est_active': True
            },
            {
                'nom': 'Station Bilal Oil Almadies',
                'adresse': 'Route des Almadies',
                'ville': 'Dakar',
                'region': 'Dakar',
                'telephone': '+221 33 867 13 14',
                'email': 'almadies@bilal-oil.com',
                'est_active': True
            },
            {
                'nom': 'Station Bilal Oil Thiès',
                'adresse': 'Avenue Senghor',
                'ville': 'Thiès',
                'region': 'Thiès',
                'telephone': '+221 33 951 23 45',
                'email': 'thies@bilal-oil.com',
                'est_active': True
            },
        ]

        services = Service.objects.all()
        for station_data in stations_data:
            station, created = Station.objects.get_or_create(nom=station_data['nom'], defaults=station_data)
            if created:
                station.services.set(services)
                self.stdout.write(f"  ✅ {station.nom}")
            else:
                self.stdout.write(f"  ⏭️  {station.nom} existe déjà")

        # ============ STATISTIQUES ============
        self.stdout.write('\n📊 Création des statistiques...')
        stats_data = [
            {
                'libelle': 'Stations Services',
                'valeur': '50',
                'unite': '+',
                'icone': 'station',
                'ordre': 1
            },
            {
                'libelle': 'Régions couvertes',
                'valeur': '14',
                'unite': '',
                'icone': 'station',
                'ordre': 2
            },
            {
                'libelle': 'Employés',
                'valeur': '500',
                'unite': '+',
                'icone': 'team',
                'ordre': 3
            },
            {
                'libelle': "Années d'expérience",
                'valeur': '15',
                'unite': '+',
                'icone': 'calendar',
                'ordre': 4
            },
        ]

        for stat_data in stats_data:
            stat, created = Statistique.objects.get_or_create(libelle=stat_data['libelle'], defaults=stat_data)
            if created:
                self.stdout.write(f"  ✅ {stat.libelle}: {stat.valeur}{stat.unite} (icône: {stat.icone})")
            else:
                # Mettre à jour l'icône si elle n'existe pas
                if not stat.icone and 'icone' in stat_data:
                    stat.icone = stat_data['icone']
                    stat.save()
                    self.stdout.write(f"  🔄 {stat.libelle} - icône mise à jour: {stat.icone}")
                else:
                    self.stdout.write(f"  ⏭️  {stat.libelle} existe déjà")

        # ============ PRIX DES CARBURANTS ============
        self.stdout.write('\n💰 Création des prix des carburants...')
        prix_data = [
            {'type_carburant': 'essence', 'prix': 850, 'est_actuel': True},
            {'type_carburant': 'gasoil', 'prix': 765, 'est_actuel': True},
            {'type_carburant': 'super', 'prix': 925, 'est_actuel': True},
            {'type_carburant': 'gpl', 'prix': 495, 'est_actuel': True},
        ]

        for prix_info in prix_data:
            prix, created = PrixCarburant.objects.get_or_create(
                type_carburant=prix_info['type_carburant'],
                date_application=date.today(),
                defaults=prix_info
            )
            if created:
                self.stdout.write(f"  ✅ {prix.get_type_carburant_display()}: {prix.prix} FCFA")
            else:
                self.stdout.write(f"  ⏭️  {prix.get_type_carburant_display()} existe déjà")

        # ============ ACTUALITÉS ============
        self.stdout.write('\n📰 Création des actualités...')
        actualites_data = [
            {
                'titre': 'Prix à la pompe - Janvier 2025',
                'type_actualite': 'prix',
                'resume': 'Découvrez les dernières évolutions des prix des carburants.',
                'contenu': 'Les prix des carburants ont été ajustés : Essence 850 FCFA, Gasoil 765 FCFA, Super 925 FCFA, GPL 495 FCFA.',
                'date_publication': timezone.now(),
                'est_publie': True,
                'est_epingle': True,
            },
            {
                'titre': 'Bilal Oil recrute',
                'type_actualite': 'recrutement',
                'resume': 'Rejoignez notre équipe ! Postes disponibles.',
                'contenu': "Nous recherchons des techniciens et commerciaux motivés. Envoyez votre CV à recrutement@bilal-oil.com",
                'date_publication': timezone.now(),
                'est_publie': True,
            },
            {
                'titre': 'Engagement pour l\'environnement',
                'type_actualite': 'engagement',
                'resume': "Bilal Oil s'engage pour un avenir durable et respectueux de l'environnement.",
                'contenu': "Dans le cadre de notre politique de responsabilité sociale et environnementale, Bilal Oil met en place des initiatives pour réduire notre empreinte carbone et promouvoir les énergies propres.",
                'date_publication': timezone.now(),
                'est_publie': True,
            },
        ]

        for actu_data in actualites_data:
            actualite, created = Actualite.objects.get_or_create(titre=actu_data['titre'], defaults=actu_data)
            if created:
                self.stdout.write(f"  ✅ {actualite.titre}")
            else:
                self.stdout.write(f"  ⏭️  {actualite.titre} existe déjà")

        # ============ RÉSUMÉ ============
        self.stdout.write('\n' + '=' * 60)
        self.stdout.write(self.style.SUCCESS('✨ Initialisation terminée avec succès !'))
        self.stdout.write('=' * 60)

        # Afficher les statistiques
        self.stdout.write(f'\n📊 Résumé:')
        self.stdout.write(f'  • Services: {Service.objects.count()}')
        self.stdout.write(f'  • Stations: {Station.objects.count()}')
        self.stdout.write(f'  • Statistiques: {Statistique.objects.count()}')
        self.stdout.write(f'  • Prix: {PrixCarburant.objects.filter(est_actuel=True).count()}')
        self.stdout.write(f'  • Actualités: {Actualite.objects.filter(est_publie=True).count()}')

        self.stdout.write(f'\n💡 Prochaines étapes:')
        self.stdout.write(f'  1. Visitez le site: http://127.0.0.1:8000/')
        self.stdout.write(f'  2. Admin: http://127.0.0.1:8000/admin/')
        self.stdout.write(f'  3. Ajoutez des images dans l\'admin\n')