<?php

namespace App\Policies;

use App\Models\Task;
use App\Models\User;

class TaskPolicy extends BasePolicy
{
    public function viewAny(User $user): bool
    {
        return true;
    }

    public function view(User $user, Task $task): bool
    {
        // Owner luôn xem được tất cả
        if ($user->hasRole('owner')) {
            return true;
        }

        // Creator và assignee luôn xem được
        if ($user->id === $task->created_by || $user->id === $task->assigned_to) {
            return true;
        }

        // Task dạng 'assigned' thì chỉ creator/assignee mới xem được
        if ($task->access === 'assigned') {
            return false;
        }

        // access = 'organization': tất cả thành viên trong org đều xem được (kể cả admin)
        return true;
    }

    public function create(User $user): bool
    {
        return $user->hasRole('owner') || $user->hasRole('admin');
    }

    public function update(User $user, Task $task): bool
    {
        // Owner được sửa tất cả
        if ($user->hasRole('owner')) {
            return true;
        }

        // Creator được sửa task của mình
        if ($user->id === $task->created_by) {
            return true;
        }

        // Người được giao được cập nhật (chỉ status)
        return $user->id === $task->assigned_to;
    }

    public function delete(User $user, Task $task): bool
    {
        if ($user->hasRole('owner')) {
            return true;
        }

        return $user->id === $task->created_by;
    }
}
