<?php

namespace App\Policies;

use App\Models\Ticket;
use App\Models\User;

class TicketPolicy
{
    public function view(User $user, Ticket $ticket): bool
    {
        if ($user->can('tickets.view')) {
            return true;
        }

        return (int) $ticket->customer_id === (int) $user->id;
    }

    public function reply(User $user, Ticket $ticket): bool
    {
        if ($ticket->isClosed()) {
            return false;
        }

        if ($user->can('tickets.reply')) {
            return true;
        }

        return $this->view($user, $ticket);
    }

    public function updateStatus(User $user, Ticket $ticket): bool
    {
        if ($ticket->isClosed()) {
            return false;
        }

        if (!$user->can('tickets.update')) {
            return false;
        }

        return $user->can('tickets.assign') || is_null($ticket->assigned_to) || (int) $ticket->assigned_to === (int) $user->id;
    }

    public function assign(User $user, Ticket $ticket): bool
    {
        return $user->can('tickets.assign') && !$ticket->isClosed();
    }

    public function close(User $user, Ticket $ticket): bool
    {
        return (int) $ticket->customer_id === (int) $user->id && $ticket->status === Ticket::STATUS_ANSWERED;
    }
}
