import random
from datetime import timedelta
from django.utils import timezone
from django.core.management.base import BaseCommand
from django.contrib.auth import get_user_model
from apps.publications.models import Publication, PublicationCategory

User = get_user_model()

CATEGORIES = [
    {"name": "Policy Brief", "description": "Short policy analysis and recommendations for decision-makers.", "color": "#6366f1"},
    {"name": "Research Report", "description": "In-depth research findings and data-driven analysis.", "color": "#0ea5e9"},
    {"name": "Working Paper", "description": "Preliminary research shared for discussion and feedback.", "color": "#f59e0b"},
    {"name": "Commentary", "description": "Opinion pieces and expert commentary on current issues.", "color": "#10b981"},
    {"name": "Event Report", "description": "Summaries and outcomes from institutional events.", "color": "#8b5cf6"},
    {"name": "Annual Report", "description": "Yearly institutional performance and financial summaries.", "color": "#ec4899"},
]

PUBLICATIONS = [
    # Policy Brief
    {"title": "Reforming Digital Governance in Indonesia", "category": "Policy Brief", "status": "published", "tags": ["digital", "governance", "policy"], "days_ago": 5},
    {"title": "Fiscal Policy and Economic Resilience 2026", "category": "Policy Brief", "status": "published", "tags": ["fiscal", "economics"], "days_ago": 12},
    {"title": "Climate Finance Mechanisms for Developing Economies", "category": "Policy Brief", "status": "review", "tags": ["climate", "finance"], "days_ago": 3},
    {"title": "AI Regulation Framework for Southeast Asia", "category": "Policy Brief", "status": "draft", "tags": ["AI", "regulation", "ASEAN"], "days_ago": 1},
    {"title": "Trade Policy Post-RCEP: Opportunities and Challenges", "category": "Policy Brief", "status": "published", "tags": ["trade", "RCEP"], "days_ago": 20},
    # Research Report
    {"title": "Indonesia's Strategic Dependencies: A Sectoral Analysis", "category": "Research Report", "status": "published", "tags": ["strategy", "trade"], "days_ago": 8},
    {"title": "Youth Employment Trends in Urban Indonesia", "category": "Research Report", "status": "published", "tags": ["employment", "youth", "urban"], "days_ago": 15},
    {"title": "Digital Inclusion in Rural Areas: 2025 Survey", "category": "Research Report", "status": "approved", "tags": ["digital", "rural", "inclusion"], "days_ago": 6},
    {"title": "Infrastructure Investment and Regional Growth", "category": "Research Report", "status": "review", "tags": ["infrastructure", "growth"], "days_ago": 2},
    {"title": "Energy Transition Roadmap for Sumatra", "category": "Research Report", "status": "published", "tags": ["energy", "transition"], "days_ago": 30},
    {"title": "Food Security and Agricultural Reform", "category": "Research Report", "status": "draft", "tags": ["food", "agriculture"], "days_ago": 1},
    # Working Paper
    {"title": "Monetary Policy Transmission in Emerging Markets", "category": "Working Paper", "status": "published", "tags": ["monetary", "economics"], "days_ago": 45},
    {"title": "Electoral System Reforms and Voter Turnout", "category": "Working Paper", "status": "review", "tags": ["elections", "democracy"], "days_ago": 4},
    {"title": "Decentralization and Public Service Delivery", "category": "Working Paper", "status": "draft", "tags": ["decentralization", "governance"], "days_ago": 2},
    {"title": "Carbon Pricing Mechanisms in Asia-Pacific", "category": "Working Paper", "status": "published", "tags": ["carbon", "climate"], "days_ago": 25},
    # Commentary
    {"title": "Why Indonesia Needs a Digital ID Framework Now", "category": "Commentary", "status": "published", "tags": ["digital ID", "policy"], "days_ago": 3},
    {"title": "The ASEAN Summit: What Was Achieved?", "category": "Commentary", "status": "published", "tags": ["ASEAN", "diplomacy"], "days_ago": 10},
    {"title": "Rethinking Subsidy Reform in the Post-COVID Era", "category": "Commentary", "status": "published", "tags": ["subsidy", "reform"], "days_ago": 18},
    {"title": "Indonesia's South China Sea Position: A Reassessment", "category": "Commentary", "status": "rejected", "tags": ["geopolitics", "foreign policy"], "days_ago": 7},
    {"title": "The Promise and Perils of Sovereign Wealth Funds", "category": "Commentary", "status": "draft", "tags": ["finance", "sovereign"], "days_ago": 1},
    # Event Report
    {"title": "CSIS Annual Forum 2025: Summary Report", "category": "Event Report", "status": "published", "tags": ["forum", "annual"], "days_ago": 60},
    {"title": "Workshop on Maritime Security: Proceedings", "category": "Event Report", "status": "published", "tags": ["maritime", "security"], "days_ago": 40},
    {"title": "Regional Economic Outlook Conference 2026", "category": "Event Report", "status": "review", "tags": ["economics", "conference"], "days_ago": 5},
    # Annual Report
    {"title": "CSIS Annual Report 2024", "category": "Annual Report", "status": "published", "tags": ["annual", "institutional"], "days_ago": 90},
    {"title": "CSIS Annual Report 2025", "category": "Annual Report", "status": "approved", "tags": ["annual", "institutional"], "days_ago": 10},
]

CONTENTS = {
    "Policy Brief": "This policy brief examines the current landscape and offers targeted recommendations for policymakers. Drawing on qualitative and quantitative research, it identifies key gaps and proposes actionable measures to address them.",
    "Research Report": "This report presents findings from extensive field research and data analysis. The study covers multiple dimensions of the issue, offering evidence-based insights and implications for both policy and practice.",
    "Working Paper": "This working paper presents preliminary findings intended to stimulate discussion. The authors welcome feedback and note that conclusions may be revised as additional data becomes available.",
    "Commentary": "This commentary reflects the views of the author and draws on current events and emerging evidence to argue for a reappraisal of existing approaches. The piece aims to contribute to the broader public policy conversation.",
    "Event Report": "This report summarizes the key discussions, presentations, and outcomes from the event. It captures the major themes raised by speakers and participants, along with recommendations emerging from the deliberations.",
    "Annual Report": "This annual report provides a comprehensive overview of institutional activities, research outputs, financial performance, and strategic milestones achieved during the reporting year.",
}


class Command(BaseCommand):
    help = "Seed publication categories and publications using HR employees as authors."

    def handle(self, *args, **options):
        # Get employee-linked users; fall back to any user
        users = list(
            User.objects.filter(employee__isnull=False).select_related("employee")
        )
        if not users:
            users = list(User.objects.all())
        if not users:
            self.stderr.write("No users found. Run seed_employees first.")
            return

        # Seed categories
        cat_map = {}
        for cat_data in CATEGORIES:
            cat, created = PublicationCategory.objects.get_or_create(
                name=cat_data["name"],
                defaults={"description": cat_data["description"], "color": cat_data["color"]},
            )
            cat_map[cat.name] = cat
            self.stdout.write(f"{'Created' if created else 'Exists '} category: {cat.name}")

        # Seed publications
        created_count = 0
        for pub_data in PUBLICATIONS:
            if Publication.objects.filter(title=pub_data["title"]).exists():
                continue

            author = random.choice(users)
            category = cat_map.get(pub_data["category"])
            created_at = timezone.now() - timedelta(days=pub_data["days_ago"])
            published_at = created_at if pub_data["status"] == "published" else None

            Publication.objects.create(
                title=pub_data["title"],
                content=CONTENTS.get(pub_data["category"], ""),
                category=category,
                author=author,
                status=pub_data["status"],
                published_at=published_at,
                tags=pub_data["tags"],
                views=random.randint(0, 1200) if pub_data["status"] == "published" else random.randint(0, 50),
            )
            created_count += 1

        self.stdout.write(self.style.SUCCESS(f"Done. Created {created_count} publications across {len(cat_map)} categories."))
