from django.core.management.base import BaseCommand
from django.utils import timezone
from datetime import datetime, timedelta
import random
from news.models import Announcement
from core.models import CustomUser

class Command(BaseCommand):
    help = 'Create dummy announcement data'

    def add_arguments(self, parser):
        parser.add_argument(
            '--count',
            type=int,
            default=20,
            help='Number of announcements to create (default: 20)'
        )

    def handle(self, *args, **options):
        count = options['count']
        
        # Get admin user or create one
        admin_user, created = CustomUser.objects.get_or_create(
            username='admin',
            defaults={
                'email': 'admin@example.com',
                'first_name': 'Admin',
                'last_name': 'User',
                'is_staff': True,
                'is_superuser': True
            }
        )
        
        if created:
            admin_user.set_password('admin123')
            admin_user.save()
            self.stdout.write(
                self.style.SUCCESS(f'Created admin user: {admin_user.username}')
            )

        # Announcement data templates
        announcement_templates = [
            {
                'title': 'Pemberitahuan Penting: Pemadaman Listrik',
                'content': 'Diberitahukan kepada seluruh warga bahwa akan ada pemadaman listrik pada hari {date} pukul {time} - {end_time}. Mohon untuk mempersiapkan diri dan menyimpan makanan di kulkas. Untuk informasi lebih lanjut, hubungi nomor 081234567890.',
                'announcement_type': 'urgent',
                'priority': 'high',
                'target_audience': 'Semua Warga',
                'location': 'Seluruh Wilayah Desa',
                'contact_person': 'Budi Santoso',
                'contact_phone': '081234567890'
            },
            {
                'title': 'Jadwal Posyandu Bulan Ini',
                'content': 'Posyandu akan dilaksanakan pada:\n- Tanggal: {date}\n- Waktu: {time}\n- Tempat: Balai Desa\n- Kegiatan: Pemeriksaan kesehatan balita, imunisasi, dan konsultasi gizi\n\nMohon untuk membawa buku KIA dan kartu keluarga. Terima kasih.',
                'announcement_type': 'schedule',
                'priority': 'normal',
                'target_audience': 'Ibu dan Balita',
                'location': 'Balai Desa',
                'contact_person': 'Siti Nurhaliza',
                'contact_phone': '081234567891'
            },
            {
                'title': 'Peringatan: Waspada Banjir',
                'content': 'Berdasarkan prakiraan cuaca BMKG, wilayah desa berpotensi mengalami banjir dalam 3 hari ke depan. Warga diharapkan:\n1. Menyiapkan sandbag di depan rumah\n2. Memindahkan barang berharga ke tempat yang lebih tinggi\n3. Menyiapkan perbekalan darurat\n4. Menghindari aktivitas di sungai\n\nUntuk bantuan darurat, hubungi nomor 081234567892.',
                'announcement_type': 'warning',
                'priority': 'urgent',
                'target_audience': 'Semua Warga',
                'location': 'Seluruh Wilayah Desa',
                'contact_person': 'Ahmad Wijaya',
                'contact_phone': '081234567892'
            },
            {
                'title': 'Acara Gotong Royong Bersih Desa',
                'content': 'Dalam rangka memperingati Hari Kemerdekaan RI, akan diadakan kegiatan gotong royong bersih desa:\n\n- Hari/Tanggal: {date}\n- Waktu: {time}\n- Tempat: Start dari Balai Desa\n- Kegiatan: Bersih-bersih jalan, saluran air, dan area umum\n\nSemua warga diharapkan berpartisipasi. Akan ada doorprize untuk peserta yang aktif!',
                'announcement_type': 'event',
                'priority': 'normal',
                'target_audience': 'Semua Warga',
                'location': 'Seluruh Wilayah Desa',
                'contact_person': 'Rudi Hartono',
                'contact_phone': '081234567893'
            },
            {
                'title': 'Layanan Administrasi Kependudukan',
                'content': 'Pelayanan administrasi kependudukan akan dilaksanakan pada:\n\n- Hari: Senin - Jumat\n- Waktu: 08.00 - 15.00 WIB\n- Tempat: Kantor Desa\n\nLayanan yang tersedia:\n- Pembuatan KTP\n- Pembuatan KK\n- Surat Keterangan\n- Surat Domisili\n\nMohon membawa dokumen yang diperlukan.',
                'announcement_type': 'service',
                'priority': 'normal',
                'target_audience': 'Warga yang Membutuhkan',
                'location': 'Kantor Desa',
                'contact_person': 'Eko Prasetyo',
                'contact_phone': '081234567894'
            },
            {
                'title': 'Informasi Pembayaran PBB',
                'content': 'Diberitahukan kepada seluruh warga bahwa pembayaran Pajak Bumi dan Bangunan (PBB) tahun 2024 sudah dapat dilakukan mulai tanggal {date}. Pembayaran dapat dilakukan melalui:\n\n1. Bank BRI\n2. Bank BNI\n3. Bank Mandiri\n4. Kantor Pos\n5. Online banking\n\nBatas waktu pembayaran: 31 Desember 2024. Untuk informasi lebih lanjut, hubungi kantor desa.',
                'announcement_type': 'info',
                'priority': 'normal',
                'target_audience': 'Warga Pemilik Tanah/Bangunan',
                'location': 'Seluruh Wilayah Desa',
                'contact_person': 'Sari Indah',
                'contact_phone': '081234567895'
            },
            {
                'title': 'Peringatan: Waspada Pencurian',
                'content': 'Diberitahukan kepada seluruh warga untuk meningkatkan kewaspadaan terhadap aksi pencurian yang marak terjadi di wilayah sekitar. Beberapa tips keamanan:\n\n1. Pastikan pintu dan jendela terkunci saat keluar rumah\n2. Jangan meninggalkan kendaraan dalam keadaan menyala\n3. Laporkan segera jika melihat hal mencurigakan\n4. Ikuti grup WhatsApp keamanan lingkungan\n\nNomor darurat: 081234567896',
                'announcement_type': 'warning',
                'priority': 'high',
                'target_audience': 'Semua Warga',
                'location': 'Seluruh Wilayah Desa',
                'contact_person': 'Bambang Sutrisno',
                'contact_phone': '081234567896'
            },
            {
                'title': 'Jadwal Vaksinasi COVID-19',
                'content': 'Program vaksinasi COVID-19 untuk warga desa akan dilaksanakan pada:\n\n- Tanggal: {date}\n- Waktu: {time}\n- Tempat: Puskesmas Desa\n- Sasaran: Warga usia 18 tahun ke atas\n\nPersyaratan:\n1. Membawa KTP\n2. Membawa kartu vaksin (jika ada)\n3. Dalam kondisi sehat\n4. Tidak sedang demam\n\nDaftar online: bit.ly/vaksin-desa',
                'announcement_type': 'schedule',
                'priority': 'high',
                'target_audience': 'Warga Usia 18+',
                'location': 'Puskesmas Desa',
                'contact_person': 'Dr. Linda Sari',
                'contact_phone': '081234567897'
            },
            {
                'title': 'Festival Budaya Desa',
                'content': 'Dalam rangka memperingati Hari Jadi Desa ke-50, akan diadakan Festival Budaya Desa:\n\n- Tanggal: {date}\n- Waktu: {time}\n- Tempat: Lapangan Desa\n\nAcara:\n- Pentas seni tradisional\n- Bazar kuliner khas desa\n- Lomba-lomba menarik\n- Pameran kerajinan tangan\n\nTiket masuk: GRATIS untuk warga desa!',
                'announcement_type': 'event',
                'priority': 'normal',
                'target_audience': 'Semua Warga',
                'location': 'Lapangan Desa',
                'contact_person': 'Dewi Kartika',
                'contact_phone': '081234567898'
            },
            {
                'title': 'Layanan Internet Gratis',
                'content': 'Pemerintah desa menyediakan layanan internet gratis untuk mendukung pembelajaran online dan UMKM:\n\n- Lokasi: Balai Desa dan 5 titik strategis\n- Waktu: 24 jam\n- Kecepatan: 50 Mbps\n- Gratis untuk warga desa\n\nCara akses:\n1. Hubungkan ke WiFi "Desa-Cerdas"\n2. Masukkan NIK sebagai password\n3. Nikmati internet gratis!\n\nSupport: 081234567899',
                'announcement_type': 'service',
                'priority': 'normal',
                'target_audience': 'Semua Warga',
                'location': 'Balai Desa dan 5 Titik Strategis',
                'contact_person': 'Rizki Pratama',
                'contact_phone': '081234567899'
            }
        ]

        # Create announcements
        created_count = 0
        for i in range(count):
            template = random.choice(announcement_templates)
            
            # Generate random dates
            start_date = timezone.now() + timedelta(days=random.randint(-30, 30))
            end_date = start_date + timedelta(days=random.randint(1, 7)) if random.choice([True, False]) else None
            
            # Generate random times
            start_time = f"{random.randint(8, 17):02d}:{random.choice(['00', '30'])}"
            end_time = f"{random.randint(18, 22):02d}:{random.choice(['00', '30'])}"
            
            # Format content with dates and times
            content = template['content'].format(
                date=start_date.strftime('%d %B %Y'),
                time=start_time,
                end_time=end_time
            )
            
            # Random status settings
            status = random.choice(['published', 'published', 'published', 'draft'])  # 75% published
            is_pinned = random.choice([True, False, False, False])  # 25% pinned
            is_popup = random.choice([True, False, False, False, False])  # 20% popup
            
            # Create unique title with counter
            title = f"{template['title']} #{i+1}"
            
            announcement = Announcement.objects.create(
                title=title,
                content=content,
                announcement_type=template['announcement_type'],
                priority=template['priority'],
                target_audience=template['target_audience'],
                location=template['location'],
                contact_person=template['contact_person'],
                contact_phone=template['contact_phone'],
                author=admin_user,
                start_date=start_date,
                end_date=end_date,
                status=status,
                is_pinned=is_pinned,
                is_popup=is_popup
            )
            
            created_count += 1
            
            if created_count % 5 == 0:
                self.stdout.write(f'Created {created_count} announcements...')

        self.stdout.write(
            self.style.SUCCESS(
                f'Successfully created {created_count} dummy announcements!'
            )
        )
        
        # Display summary
        total_announcements = Announcement.objects.count()
        published_announcements = Announcement.objects.filter(status='published').count()
        draft_announcements = Announcement.objects.filter(status='draft').count()
        pinned_announcements = Announcement.objects.filter(is_pinned=True).count()
        popup_announcements = Announcement.objects.filter(is_popup=True).count()
        
        self.stdout.write('\n--- Summary ---')
        self.stdout.write(f'Total announcements: {total_announcements}')
        self.stdout.write(f'Published announcements: {published_announcements}')
        self.stdout.write(f'Draft announcements: {draft_announcements}')
        self.stdout.write(f'Pinned announcements: {pinned_announcements}')
        self.stdout.write(f'Popup announcements: {popup_announcements}')
        
        # Display by type
        self.stdout.write('\n--- By Type ---')
        for announcement_type, _ in Announcement.TYPE_CHOICES:
            count_by_type = Announcement.objects.filter(announcement_type=announcement_type).count()
            self.stdout.write(f'{announcement_type}: {count_by_type}')
        
        # Display by priority
        self.stdout.write('\n--- By Priority ---')
        for priority, _ in Announcement.PRIORITY_CHOICES:
            count_by_priority = Announcement.objects.filter(priority=priority).count()
            self.stdout.write(f'{priority}: {count_by_priority}')
