"""
Management command pour creer les types de parametres par defaut.

Usage:
    python manage.py seed_setting_types
    python manage.py seed_setting_types --force  # Recree tous les types
"""
from django.core.management.base import BaseCommand
from django.utils.text import slugify

from cms.models import SettingType


class Command(BaseCommand):
    help = 'Cree les types de parametres par defaut'

    # Types par defaut avec leurs configurations
    DEFAULT_TYPES = [
        {
            'name': 'Texte',
            'slug': 'text',
            'value_type': 'text',
            'icon': 'fa-font',
            'description': 'Texte court sur une ligne',
        },
        {
            'name': 'Texte long',
            'slug': 'textarea',
            'value_type': 'textarea',
            'icon': 'fa-align-left',
            'description': 'Texte multiligne (adresse, description, etc.)',
        },
        {
            'name': 'Telephone',
            'slug': 'phone',
            'value_type': 'phone',
            'icon': 'fa-phone',
            'format_pattern': '<a href="tel:{value}" class="setting-phone">{value}</a>',
            'description': 'Numero de telephone avec lien cliquable',
        },
        {
            'name': 'Email',
            'slug': 'email',
            'value_type': 'email',
            'icon': 'fa-envelope',
            'format_pattern': '<a href="mailto:{value}" class="setting-email">{value}</a>',
            'description': 'Adresse email avec lien mailto',
        },
        {
            'name': 'URL',
            'slug': 'url',
            'value_type': 'url',
            'icon': 'fa-link',
            'format_pattern': '<a href="{value}" target="_blank" rel="noopener" class="setting-url">{value}</a>',
            'description': 'Lien URL avec ouverture nouvel onglet',
        },
        {
            'name': 'URL reseau social',
            'slug': 'social-url',
            'value_type': 'url',
            'icon': 'fa-share-alt',
            'format_pattern': '{value}',
            'description': 'URL de profil reseau social (sans formatage)',
        },
        {
            'name': 'Devise EUR',
            'slug': 'currency-eur',
            'value_type': 'currency',
            'icon': 'fa-euro-sign',
            'format_pattern': '<span class="setting-currency">{value} EUR</span>',
            'description': 'Montant en euros',
        },
        {
            'name': 'Devise USD',
            'slug': 'currency-usd',
            'value_type': 'currency',
            'icon': 'fa-dollar-sign',
            'format_pattern': '<span class="setting-currency">${value}</span>',
            'description': 'Montant en dollars',
        },
        {
            'name': 'Pourcentage',
            'slug': 'percentage',
            'value_type': 'percentage',
            'icon': 'fa-percent',
            'format_pattern': '<span class="setting-percentage">{value}%</span>',
            'description': 'Valeur en pourcentage',
        },
        {
            'name': 'Nombre',
            'slug': 'number',
            'value_type': 'number',
            'icon': 'fa-hashtag',
            'description': 'Nombre entier',
        },
        {
            'name': 'Nombre decimal',
            'slug': 'decimal',
            'value_type': 'decimal',
            'icon': 'fa-calculator',
            'description': 'Nombre a virgule',
        },
        {
            'name': 'Couleur',
            'slug': 'color',
            'value_type': 'color',
            'icon': 'fa-palette',
            'format_pattern': '<span class="setting-color-preview" style="background-color:{value};width:20px;height:20px;display:inline-block;border-radius:3px;vertical-align:middle;margin-right:5px;"></span>{value}',
            'description': 'Code couleur hexadecimal (#RRGGBB)',
        },
        {
            'name': 'Booleen',
            'slug': 'boolean',
            'value_type': 'boolean',
            'icon': 'fa-toggle-on',
            'description': 'Valeur oui/non, true/false',
        },
        {
            'name': 'Image',
            'slug': 'image',
            'value_type': 'image',
            'icon': 'fa-image',
            'format_pattern': '<img src="{value}" alt="" class="setting-image" />',
            'description': 'Fichier image (logo, icone, etc.)',
        },
        {
            'name': 'Logo',
            'slug': 'logo',
            'value_type': 'image',
            'icon': 'fa-copyright',
            'format_pattern': '<img src="{value}" alt="Logo" class="setting-logo" style="max-height:60px;" />',
            'description': 'Logo du site',
        },
        {
            'name': 'Meta description',
            'slug': 'meta-description',
            'value_type': 'textarea',
            'icon': 'fa-search',
            'description': 'Description SEO pour les moteurs de recherche',
        },
        {
            'name': 'Meta keywords',
            'slug': 'meta-keywords',
            'value_type': 'text',
            'icon': 'fa-tags',
            'description': 'Mots-cles SEO separes par des virgules',
        },
    ]

    def add_arguments(self, parser):
        parser.add_argument(
            '--force',
            action='store_true',
            help='Supprime et recree tous les types',
        )

    def handle(self, *args, **options):
        force = options.get('force', False)
        created_count = 0
        updated_count = 0
        skipped_count = 0

        if force:
            self.stdout.write(self.style.WARNING('Mode force: suppression des types existants...'))
            SettingType.objects.filter(slug__in=[t['slug'] for t in self.DEFAULT_TYPES]).delete()

        for type_data in self.DEFAULT_TYPES:
            slug = type_data['slug']
            defaults = {k: v for k, v in type_data.items() if k != 'slug'}

            setting_type, created = SettingType.objects.get_or_create(
                slug=slug,
                defaults=defaults
            )

            if created:
                created_count += 1
                self.stdout.write(
                    self.style.SUCCESS(f'  + Cree: {setting_type.name} ({slug})')
                )
            elif force:
                for key, value in defaults.items():
                    setattr(setting_type, key, value)
                setting_type.save()
                updated_count += 1
                self.stdout.write(
                    self.style.WARNING(f'  ~ Mis a jour: {setting_type.name} ({slug})')
                )
            else:
                skipped_count += 1
                self.stdout.write(
                    self.style.NOTICE(f'  - Existe deja: {setting_type.name} ({slug})')
                )

        self.stdout.write('')
        self.stdout.write(self.style.SUCCESS(
            f'Termine: {created_count} crees, {updated_count} mis a jour, {skipped_count} ignores'
        ))
