"""
Команда для создания примерных промокодов.
"""
from django.core.management.base import BaseCommand
from django.utils import timezone
from datetime import timedelta
from apps.subscriptions.models import PromoCode, SubscriptionPlan
from decimal import Decimal


class Command(BaseCommand):
    help = 'Создает примерные промокоды для тестирования'

    def handle(self, *args, **options):
        self.stdout.write('Создание примерных промокодов...')
        
        now = timezone.now()
        
        # 1. Промокод на 10% скидку
        promo_10, created = PromoCode.objects.get_or_create(
            code='WELCOME10',
            defaults={
                'description': 'Приветственная скидка 10% для новых пользователей',
                'discount_type': 'percentage',
                'discount_value': Decimal('10'),
                'valid_from': now,
                'valid_until': now + timedelta(days=365),  # Действует год
                'max_uses_total': 1000,
                'max_uses_per_user': 1,
                'is_active': True,
            }
        )
        
        if created:
            self.stdout.write(self.style.SUCCESS(f'✓ Создан промокод: {promo_10.code} (10% скидка)'))
        else:
            self.stdout.write(self.style.WARNING(f'⚠ Промокод уже существует: {promo_10.code}'))
        
        # 2. Промокод на 20% скидку
        promo_20, created = PromoCode.objects.get_or_create(
            code='SUMMER20',
            defaults={
                'description': 'Летняя акция - скидка 20%',
                'discount_type': 'percentage',
                'discount_value': Decimal('20'),
                'valid_from': now,
                'valid_until': now + timedelta(days=90),  # Действует 3 месяца
                'max_uses_total': 500,
                'max_uses_per_user': 1,
                'is_active': True,
            }
        )
        
        if created:
            self.stdout.write(self.style.SUCCESS(f'✓ Создан промокод: {promo_20.code} (20% скидка)'))
        else:
            self.stdout.write(self.style.WARNING(f'⚠ Промокод уже существует: {promo_20.code}'))
        
        # 3. Промокод на фиксированную скидку 500 руб
        promo_fixed, created = PromoCode.objects.get_or_create(
            code='SAVE500',
            defaults={
                'description': 'Скидка 500 рублей на первую подписку',
                'discount_type': 'fixed',
                'discount_value': Decimal('500'),
                'valid_from': now,
                'valid_until': now + timedelta(days=180),  # Действует 6 месяцев
                'max_uses_total': 200,
                'max_uses_per_user': 1,
                'is_active': True,
            }
        )
        
        if created:
            self.stdout.write(self.style.SUCCESS(f'✓ Создан промокод: {promo_fixed.code} (500 руб скидка)'))
        else:
            self.stdout.write(self.style.WARNING(f'⚠ Промокод уже существует: {promo_fixed.code}'))
        
        # 4. Промокод на 30% скидку (ограниченный)
        promo_30, created = PromoCode.objects.get_or_create(
            code='VIP30',
            defaults={
                'description': 'VIP промокод - скидка 30%',
                'discount_type': 'percentage',
                'discount_value': Decimal('30'),
                'valid_from': now,
                'valid_until': now + timedelta(days=60),  # Действует 2 месяца
                'max_uses_total': 50,  # Очень ограниченный
                'max_uses_per_user': 1,
                'is_active': True,
            }
        )
        
        if created:
            self.stdout.write(self.style.SUCCESS(f'✓ Создан промокод: {promo_30.code} (30% скидка, ограниченный)'))
        else:
            self.stdout.write(self.style.WARNING(f'⚠ Промокод уже существует: {promo_30.code}'))
        
        # 5. Промокод для определенных планов
        plan_per_student = SubscriptionPlan.objects.filter(slug='per-student-basic').first()
        if plan_per_student:
            promo_plan, created = PromoCode.objects.get_or_create(
                code='STUDENT15',
                defaults={
                    'description': 'Скидка 15% на подписку "За ученика"',
                    'discount_type': 'percentage',
                    'discount_value': Decimal('15'),
                    'valid_from': now,
                    'valid_until': now + timedelta(days=120),
                    'max_uses_total': 300,
                    'max_uses_per_user': 1,
                    'is_active': True,
                }
            )
            
            if created:
                promo_plan.applicable_plans.add(plan_per_student)
                self.stdout.write(self.style.SUCCESS(f'✓ Создан промокод: {promo_plan.code} (15% скидка, только для "За ученика")'))
            else:
                self.stdout.write(self.style.WARNING(f'⚠ Промокод уже существует: {promo_plan.code}'))
        
        self.stdout.write(self.style.SUCCESS('\n✓ Все промокоды созданы!'))
        self.stdout.write('\nДоступные промокоды:')
        self.stdout.write('  1. WELCOME10 - 10% скидка (1000 использований)')
        self.stdout.write('  2. SUMMER20 - 20% скидка (500 использований, 3 месяца)')
        self.stdout.write('  3. SAVE500 - 500 руб скидка (200 использований)')
        self.stdout.write('  4. VIP30 - 30% скидка (50 использований, ограниченный)')
        if plan_per_student:
            self.stdout.write('  5. STUDENT15 - 15% скидка на "За ученика" (300 использований)')

