from datetime import date

from django.contrib.auth import get_user_model
from django.core.management.base import BaseCommand

from apps.administrations.models import HelpdeskTicket, HelpdeskResponse

User = get_user_model()

TICKETS = [
    {
        "subject": "Printer lantai 3 tidak bisa duplex",
        "description": "Printer Canon iR-ADV gagal duplex sejak update firmware kemarin.",
        "category": "General Helpdesk",
        "priority": "medium",
        "department": "Knowledge Management",
        "status": "in_progress",
        "responses": [
            ("Tiket diterima. Kami jadwalkan teknisi Canon untuk cek firmware besok pagi.", False),
            ("Catatan internal: firmware perlu di-rollback ke versi 3.12.", True),
        ],
    },
    {
        "subject": "Request monitor tambahan untuk dual screen",
        "description": "Butuh monitor 24\" untuk setup dual display research analyst baru.",
        "category": "IT Helpdesk",
        "priority": "low",
        "department": "Researcher",
        "status": "open",
        "responses": [],
    },
    {
        "subject": "AC ruang rapat Soekarno tidak dingin",
        "description": "Suhu tetap di 26C meski sudah di-set 18C. Mengganggu rapat penting.",
        "category": "General Helpdesk",
        "priority": "high",
        "department": "Operations",
        "status": "in_progress",
        "responses": [
            ("Teknisi AC sudah di lokasi, kemungkinan kompresor bermasalah.", False),
        ],
    },
    {
        "subject": "VPN error saat akses dari luar kantor",
        "description": "FortiClient tidak bisa connect, error -5 sejak hari Jumat.",
        "category": "IT Helpdesk",
        "priority": "urgent",
        "department": "Researcher",
        "status": "pending_user",
        "responses": [
            ("Mohon kirim screenshot error dan versi FortiClient yang terpasang.", False),
        ],
    },
    {
        "subject": "Restock ATK lantai 2 (kertas, pulpen, post-it)",
        "description": "Persediaan kertas A4 dan pulpen habis di pantry lantai 2.",
        "category": "General Helpdesk",
        "priority": "low",
        "department": "Finance",
        "status": "open",
        "responses": [],
    },
]


class Command(BaseCommand):
    help = "Seed helpdesk tickets with responses"

    def handle(self, *args, **options):
        if HelpdeskTicket.objects.exists():
            self.stdout.write("Helpdesk tickets already exist, skipping.")
            return

        users = list(User.objects.all()[:6])
        if not users:
            self.stdout.write(self.style.ERROR("No users found. Seed users first."))
            return

        year = date.today().year
        for i, data in enumerate(TICKETS, start=1):
            requester = users[i % len(users)]
            assignee = users[(i + 1) % len(users)]
            ticket = HelpdeskTicket.objects.create(
                ticket_number=f"HLP-{year}-{i:04d}",
                requester=requester,
                subject=data["subject"],
                description=data["description"],
                category=data["category"],
                priority=data["priority"],
                status=data["status"],
                department=data["department"],
                assigned_to=assignee,
            )
            for message, is_internal in data["responses"]:
                HelpdeskResponse.objects.create(
                    ticket=ticket,
                    author=assignee,
                    message=message,
                    is_internal=is_internal,
                )
            self.stdout.write(f"  + {ticket.ticket_number}  {ticket.subject}")

        self.stdout.write(self.style.SUCCESS(f"Seeded {len(TICKETS)} helpdesk tickets."))
