from django.core.management.base import BaseCommand
from django.utils import timezone
from django.db.models import Q
from core.models import CustomUser
from news.models import Announcement
from datetime import datetime, timedelta
import random


class Command(BaseCommand):
    help = 'Membuat data dummy untuk pengumuman'

    def add_arguments(self, parser):
        parser.add_argument(
            '--clear',
            action='store_true',
            help='Hapus semua data pengumuman yang ada sebelum membuat data dummy',
        )

    def handle(self, *args, **options):
        if options['clear']:
            Announcement.objects.all().delete()
            self.stdout.write(
                self.style.WARNING('Semua data pengumuman telah dihapus.')
            )

        # Get or create admin user
        admin_user, created = CustomUser.objects.get_or_create(
            username='admin',
            defaults={
                'email': 'admin@pulosarok.desa.id',
                'first_name': 'Admin',
                'last_name': 'Desa',
                'is_staff': True,
                'is_superuser': True,
            }
        )
        if created:
            admin_user.set_password('admin123')
            admin_user.save()

        # Data dummy untuk pengumuman
        now = timezone.now()
        announcement_data = [
            {
                'title': 'Jadwal Posyandu Bulan Ini',
                'content': 'Posyandu akan dilaksanakan setiap hari Selasa dan Kamis pukul 08.00-11.00 WIB di Balai Desa. Semua ibu hamil dan balita diharapkan hadir untuk pemeriksaan rutin.',
                'announcement_type': 'schedule',
                'priority': 'high',
                'is_pinned': True,
                'start_date': now - timedelta(days=1),
                'end_date': now + timedelta(days=30),
                'target_audience': 'Ibu Hamil dan Balita',
                'contact_person': 'Bidan Desa',
                'contact_phone': '081234567890',
                'location': 'Balai Desa Pulosarok'
            },
            {
                'title': 'Acara Gotong Royong Bersih Desa',
                'content': 'Akan diadakan gotong royong bersih desa pada hari Minggu, 27 Oktober 2025 pukul 07.00 WIB. Semua warga diharapkan berpartisipasi untuk menjaga kebersihan lingkungan desa.',
                'announcement_type': 'event',
                'priority': 'normal',
                'is_pinned': False,
                'start_date': now - timedelta(days=2),
                'end_date': now + timedelta(days=7),
                'target_audience': 'Semua Warga',
                'contact_person': 'Ketua RT',
                'contact_phone': '081234567891',
                'location': 'Seluruh Desa Pulosarok'
            },
            {
                'title': 'Pemberitahuan Penting: Pemadaman Listrik',
                'content': 'Akan terjadi pemadaman listrik pada hari Selasa, 22 Oktober 2025 pukul 08.00-16.00 WIB untuk perawatan jaringan. Warga diharapkan mempersiapkan genset atau lilin.',
                'announcement_type': 'warning',
                'priority': 'urgent',
                'is_pinned': True,
                'start_date': now - timedelta(hours=6),
                'end_date': now + timedelta(days=1),
                'target_audience': 'Semua Warga',
                'contact_person': 'PLN',
                'contact_phone': '123',
                'location': 'Seluruh Desa Pulosarok'
            },
            {
                'title': 'Pendaftaran Program Bantuan Sosial',
                'content': 'Pendaftaran program bantuan sosial untuk keluarga kurang mampu dibuka mulai tanggal 25 Oktober 2025. Persyaratan: KK, KTP, dan surat keterangan tidak mampu dari RT/RW.',
                'announcement_type': 'info',
                'priority': 'high',
                'is_pinned': False,
                'start_date': now - timedelta(days=1),
                'end_date': now + timedelta(days=14),
                'target_audience': 'Keluarga Kurang Mampu',
                'contact_person': 'Kepala Desa',
                'contact_phone': '081234567892',
                'location': 'Kantor Desa Pulosarok'
            },
            {
                'title': 'Jadwal Pelayanan Administrasi',
                'content': 'Pelayanan administrasi desa buka setiap hari Senin-Jumat pukul 08.00-15.00 WIB. Untuk layanan surat keterangan, domisili, dan lainnya. Warga diharapkan membawa dokumen yang diperlukan.',
                'announcement_type': 'service',
                'priority': 'normal',
                'is_pinned': False,
                'start_date': now - timedelta(days=3),
                'end_date': None,  # Tidak ada tanggal berakhir
                'target_audience': 'Semua Warga',
                'contact_person': 'Sekretaris Desa',
                'contact_phone': '081234567893',
                'location': 'Kantor Desa Pulosarok'
            },
            {
                'title': 'Kegiatan PKK Bulan Oktober',
                'content': 'PKK akan mengadakan kegiatan arisan dan pelatihan kerajinan tangan setiap hari Rabu pukul 14.00 WIB. Semua ibu-ibu PKK diharapkan hadir untuk mempererat silaturahmi.',
                'announcement_type': 'event',
                'priority': 'normal',
                'is_pinned': False,
                'start_date': now - timedelta(days=1),
                'end_date': now + timedelta(days=10),
                'target_audience': 'Ibu-ibu PKK',
                'contact_person': 'Ketua PKK',
                'contact_phone': '081234567894',
                'location': 'Balai Desa Pulosarok'
            },
            {
                'title': 'Informasi Kesehatan: Vaksinasi COVID-19',
                'content': 'Puskesmas akan mengadakan vaksinasi COVID-19 booster untuk warga yang belum mendapat vaksin lengkap. Jadwal: 28 Oktober 2025 pukul 09.00-12.00 WIB di Posyandu.',
                'announcement_type': 'info',
                'priority': 'high',
                'is_pinned': False,
                'start_date': now - timedelta(hours=12),
                'end_date': now + timedelta(days=7),
                'target_audience': 'Semua Warga',
                'contact_person': 'Bidan Desa',
                'contact_phone': '081234567895',
                'location': 'Posyandu Desa Pulosarok'
            }
        ]

        created_count = 0
        for data in announcement_data:
            announcement, created = Announcement.objects.get_or_create(
                title=data['title'],
                defaults={
                    'content': data['content'],
                    'announcement_type': data['announcement_type'],
                    'priority': data['priority'],
                    'is_pinned': data['is_pinned'],
                    'start_date': data['start_date'],
                    'end_date': data['end_date'],
                    'target_audience': data['target_audience'],
                    'contact_person': data['contact_person'],
                    'contact_phone': data['contact_phone'],
                    'location': data['location'],
                    'author': admin_user,
                    'status': 'published',
                }
            )
            
            if created:
                created_count += 1
                self.stdout.write(
                    self.style.SUCCESS(f'✓ Pengumuman "{data["title"]}" berhasil dibuat')
                )
            else:
                self.stdout.write(
                    self.style.WARNING(f'⚠ Pengumuman "{data["title"]}" sudah ada')
                )

        self.stdout.write(
            self.style.SUCCESS(f'\n🎉 Berhasil membuat {created_count} data dummy pengumuman!')
        )
        
        # Tampilkan ringkasan
        total_announcements = Announcement.objects.count()
        active_announcements = Announcement.objects.filter(
            status='published',
            start_date__lte=now
        ).filter(
            Q(end_date__isnull=True) | Q(end_date__gte=now)
        ).count()
        
        self.stdout.write(f'\n📊 Ringkasan:')
        self.stdout.write(f'  • Total pengumuman: {total_announcements}')
        self.stdout.write(f'  • Pengumuman aktif: {active_announcements}')
        
        self.stdout.write(
            self.style.SUCCESS('\n💡 Pengumuman sekarang akan muncul di halaman home!')
        )
