from decimal import Decimal

from django.core.management.base import BaseCommand
from django.utils import timezone

from apps.accounts.models import User
from apps.catalog.models import Category, Product


class Command(BaseCommand):
    help = 'Seed demo admin, a KYC-verified seller, categories and products.'

    def handle(self, *args, **options):
        admin, created = User.objects.get_or_create(
            phone='0700000000',
            defaults={'name': 'Platform Admin', 'role': User.Role.ADMIN,
                      'is_staff': True, 'is_superuser': True},
        )
        if created:
            admin.set_password('admin1234')
            admin.save()
        self.stdout.write(self.style.SUCCESS(f'Admin: {admin.phone} / admin1234'))

        seller, created = User.objects.get_or_create(
            phone='0711111111',
            defaults={'name': 'Demo Seller', 'role': User.Role.USER,
                      'kyc_status': User.KYCStatus.VERIFIED,
                      'kyc_verified_at': timezone.now()},
        )
        if created:
            seller.set_password('seller1234')
            seller.save()
        self.stdout.write(self.style.SUCCESS(f'Seller: {seller.phone} / seller1234'))

        watches, _ = Category.objects.get_or_create(name='Watches')
        demo_products = [
            ('Garner & Spruces Chrono', Decimal('4999'), Decimal('3500'), 12),
            ('Grant Watch Classic', Decimal('1000'), Decimal('650'), 10),
            ('Outdoor Sports Watch', Decimal('1550'), Decimal('1000'), 15),
        ]
        for name, price, cost, pct in demo_products:
            Product.objects.get_or_create(
                name=name,
                defaults={
                    'selling_price': price, 'cost_price': cost,
                    'commission_percent': pct, 'category': watches,
                    'stock_quantity': -1, 'status': Product.Status.ACTIVE,
                    'colors': ['Black', 'Gold'], 'sizes': [],
                },
            )
        self.stdout.write(self.style.SUCCESS(
            f'Products: {Product.objects.count()} total'))
        self.stdout.write(self.style.SUCCESS('Demo data ready.'))
