from typing import Optional

from helpdesk.models import Ticket
from django.db.models import QuerySet
from django.core.exceptions import ObjectDoesNotExist

class TicketRepository:

    def get_ticket_by_id(self, ticket_id: int) -> Optional[Ticket]:
        """ดึง Ticket ตาม ID (คืนค่า None หากไม่พบ)"""
        try:
            return Ticket.objects.select_related('creator', 'assigned_to').get(pk=ticket_id)
        # ดักจับ ObjectDoesNotExist แล้วคืนค่า None เพื่อให้ TicketService ตรวจสอบ if ticket is None และโยน TicketNotFoundError แทน
        except ObjectDoesNotExist:
            return None

    def get_unified_inbox_list(self) -> QuerySet[Ticket]:
        """
        ดึงรายการ Ticket ทั้งหมด จัดเรียงตามการอัปเดตล่าสุด
        (สำหรับหน้า Unified Inbox)
        """
        return Ticket.objects.all().select_related('creator', 'assigned_to').order_by('-last_message_at')

    def update_ticket(self, ticket: Ticket, update_data: dict) -> Ticket:
        """อัปเดตฟิลด์ที่ต้องการของ Ticket instance"""
        for key, value in update_data.items():
            setattr(ticket, key, value)
        ticket.save()
        return ticket