import random
from django.core.management.base import BaseCommand
from django.utils.text import slugify
from faker import Faker
from layanan.models import Service, ServiceCategory, ServiceBenefit, ServiceRequirement, ServiceImage

class Command(BaseCommand):
    help = 'Populates the database with a specified number of services and long descriptions.'

    def add_arguments(self, parser):
        parser.add_argument(
            '--num_services',
            type=int,
            default=30,
            help='The number of services to create.'
        )
        parser.add_argument(
            '--clear_existing',
            action='store_true',
            help='Clear all existing services before populating.'
        )

    def handle(self, *args, **kwargs):
        num_services = kwargs['num_services']
        clear_existing = kwargs['clear_existing']
        fake = Faker('id_ID') # Use Indonesian locale for Faker

        if clear_existing:
            self.stdout.write(self.style.WARNING('Clearing all existing services...'))
            Service.objects.all().delete()
            ServiceBenefit.objects.all().delete()
            ServiceRequirement.objects.all().delete()
            ServiceImage.objects.all().delete()
            self.stdout.write(self.style.SUCCESS('Existing services cleared.'))

        self.stdout.write(self.style.MIGRATE_HEADING(f'Creating {num_services} services...'))

        # Ensure some categories exist
        categories = ServiceCategory.objects.all()
        if not categories.exists():
            self.stdout.write(self.style.WARNING('No categories found. Creating default categories...'))
            category_data = [
                {'name': 'Pendidikan', 'icon': 'fas fa-book', 'color': '#3b82f6'},
                {'name': 'Sosial', 'icon': 'fas fa-hands-helping', 'color': '#ef4444'},
                {'name': 'Kesehatan', 'icon': 'fas fa-heartbeat', 'color': '#10b981'},
                {'name': 'Lingkungan', 'icon': 'fas fa-leaf', 'color': '#22c55e'},
                {'name': 'Teknologi', 'icon': 'fas fa-laptop-code', 'color': '#8b5cf6'},
                {'name': 'Olahraga', 'icon': 'fas fa-running', 'color': '#f59e0b'},
                {'name': 'Seni & Budaya', 'icon': 'fas fa-palette', 'color': '#ec4899'},
                {'name': 'Ekonomi', 'icon': 'fas fa-chart-line', 'color': '#06b6d4'},
            ]
            
            for cat_data in category_data:
                ServiceCategory.objects.create(
                    name=cat_data['name'],
                    slug=slugify(cat_data['name']),
                    description=fake.sentence(),
                    icon=cat_data['icon'],
                    color=cat_data['color'],
                    is_active=True,
                    order=len(ServiceCategory.objects.all())
                )
            categories = ServiceCategory.objects.all()
            self.stdout.write(self.style.SUCCESS('Default categories created.'))
        
        if not categories.exists():
            self.stdout.write(self.style.ERROR('No categories available to assign services. Please create some categories first.'))
            return

        # Service titles and descriptions in Indonesian
        service_templates = [
            {
                'title': 'Program Pengabdian Masyarakat Desa',
                'description': 'Program pengabdian masyarakat di desa terpencil untuk meningkatkan kesejahteraan masyarakat',
                'content': 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.'
            },
            {
                'title': 'Pelatihan Kewirausahaan Digital',
                'description': 'Pelatihan komprehensif untuk mengembangkan keterampilan kewirausahaan di era digital',
                'content': 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.'
            },
            {
                'title': 'Konsultasi Kesehatan Mental',
                'description': 'Layanan konsultasi dan pendampingan untuk kesehatan mental dan kesejahteraan psikologis',
                'content': 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.'
            }
        ]

        for i in range(num_services):
            # Use template or generate random
            if i < len(service_templates):
                template = service_templates[i]
                title = template['title']
                description = template['description']
                content = template['content']
            else:
                title = fake.sentence(nb_words=random.randint(3, 7)).replace('.', '')
                description = fake.paragraph(nb_sentences=random.randint(2, 4))
                # Generate long Lorem Ipsum content
                content = fake.paragraphs(nb=random.randint(8, 15))
                content = "\n\n".join(content)

            # Generate duration string
            duration_value = random.randint(1, 12)
            duration_unit = random.choice(['hari', 'minggu', 'bulan'])
            duration = f"{duration_value} {duration_unit}"
            
            # Generate price
            price = random.choice([0, 0, 0, 0, 50000, 100000, 250000, 500000])
            is_free = price == 0

            # Generate unique slug
            base_slug = slugify(title)
            slug = base_slug
            counter = 1
            while Service.objects.filter(slug=slug).exists():
                slug = f"{base_slug}-{counter}"
                counter += 1

            service = Service.objects.create(
                title=title,
                slug=slug,
                category=random.choice(categories),
                description=description,
                content=content,
                price=price,
                is_free=is_free,
                duration=duration,
                capacity=random.randint(10, 100) if fake.boolean(chance_of_getting_true=60) else None,
                is_active=True,
                is_featured=fake.boolean(chance_of_getting_true=25),
                is_popular=fake.boolean(chance_of_getting_true=30),
                is_new=fake.boolean(chance_of_getting_true=40),
                registration_url=fake.url() if fake.boolean(chance_of_getting_true=70) else None,
                documentation_url=fake.url() if fake.boolean(chance_of_getting_true=50) else None,
                contact_person=fake.name(),
                contact_email=fake.email(),
                contact_phone=fake.phone_number(),
                status=random.choice(['active', 'active', 'active', 'coming_soon', 'maintenance']), # More active services
                order=i,
                views_count=random.randint(0, 100),
                keywords=fake.words(nb=5),
                meta_title=title[:200],
                meta_description=description[:160]
            )

            # Add some benefits
            benefit_titles = [
                'Meningkatkan keterampilan praktis',
                'Sertifikat resmi',
                'Mentoring berkelanjutan',
                'Networking dengan profesional',
                'Akses ke materi eksklusif',
                'Komunitas alumni',
                'Konsultasi gratis',
                'Portfolio development'
            ]
            
            for _ in range(random.randint(2, 5)):
                ServiceBenefit.objects.create(
                    service=service,
                    title=random.choice(benefit_titles),
                    description=fake.paragraph(nb_sentences=1),
                    icon=random.choice(['fas fa-check-circle', 'fas fa-star', 'fas fa-award', 'fas fa-lightbulb', 'fas fa-users', 'fas fa-certificate'])
                )

            # Add some requirements
            requirement_titles = [
                'Kartu identitas',
                'Surat keterangan sehat',
                'CV atau resume',
                'Motivasi letter',
                'Pas foto 3x4',
                'Transkrip nilai',
                'Surat rekomendasi',
                'Portfolio karya'
            ]
            
            for _ in range(random.randint(1, 4)):
                ServiceRequirement.objects.create(
                    service=service,
                    title=random.choice(requirement_titles),
                    description=fake.paragraph(nb_sentences=1),
                    is_mandatory=fake.boolean(chance_of_getting_true=70)
                )
            
            self.stdout.write(self.style.SUCCESS(f'Created service: {service.title}'))

        self.stdout.write(self.style.SUCCESS(f'Successfully created {num_services} services.'))

