<?php

$method = $_SERVER['REQUEST_METHOD'];

if ($method === 'POST') {
    $data = RestApi::getInput();
    $action = $data['action'] ?? null;
    $user_id = RestApi::getCurrentUserId();
    $task = new Task();

    // Загрузка изображения
    if ($action === 'upload_image') {
        $task_id = $data['task_id'] ?? null;
        $file_base64 = $data['file_data'] ?? null;
        $file_name = $data['file_name'] ?? null;

        // Проверяем право на редактирование задачи
        $taskData = Task::check_task($task_id);
        ProjectAccess::requireEditTask($taskData['id_project'], $user_id, (int)($taskData['id_account'] ?? 0), (int)($taskData['create_id_account'] ?? 0));

        $result = Task::uploadFile($task_id, $file_base64, $file_name);
        RestApi::response($result);
    }

    // Удаление изображений
    if ($action === 'delete_image') {
        $task_id = $data['task_id'] ?? null;
        $file_names = $data['file_names'] ?? $data['file_name'] ?? null;

        // Проверяем право на редактирование задачи
        $taskData = Task::check_task($task_id);
        ProjectAccess::requireEditTask($taskData['id_project'], $user_id, (int)($taskData['id_account'] ?? 0), (int)($taskData['create_id_account'] ?? 0));

        $result = Task::deleteFile($task_id, $file_names);
        RestApi::response($result);
    }

    // Изменение порядка и колонки задачи
    if ($action === 'update_order') {
        $id = $data['id'] ?? null;
        $column_id = $data['column_id'] ?? null;
        $to_index = $data['to_index'] ?? 0;

        // Проверяем право на перемещение (с учётом move_own_task_only)
        $taskData = Task::check_task($id);
        ProjectAccess::requireMoveTask($taskData['id_project'], $user_id, (int)($taskData['id_account'] ?? 0), (int)($taskData['create_id_account'] ?? 0));

        $result = Task::updateOrder($id, $column_id, $to_index);
        RestApi::response($result);
    }

    // Обновление задачи
    if ($action === 'update') {
        $task->id = $data['id'] ?? null;
        
        // Проверяем право на редактирование
        $taskData = Task::check_task($task->id);
        ProjectAccess::requireEditTask($taskData['id_project'], $user_id, (int)($taskData['id_account'] ?? 0), (int)($taskData['create_id_account'] ?? 0));

        $task->id_department = $data['id_department'] ?? null;
        $task->id_label = $data['id_label'] ?? null;
        $task->id_account = $data['id_account'] ?? null;
        $task->column_id = $data['column_id'] ?? null;
        $task->order = $data['order'] ?? null;
        $task->date = $data['date'] ?? null;
        $task->title = $data['title'] ?? '';
        $task->descript = $data['descript'] ?? '';
        $task->descript_full = $data['descript_full'] ?? '';

        $result = $task->update();
        RestApi::response($result);
    }

    // Создание задачи
    if ($action === 'create') {
        $project_id = $data['id_project'] ?? null;
        
        // Проверяем право на создание задач
        ProjectAccess::requirePermission($project_id, $user_id, 'create_task');
        
        // Проверяем что у проекта есть колонки
        $columns = Project::getColumns($project_id);
        if (empty($columns)) {
            RestApi::response(['success' => false, 'errors' => ['project' => 'У проекта нет колонок. Создайте хотя бы одну колонку.']], 400);
        }

        $task->id_project = $project_id;
        $task->id_department = $data['id_department'] ?? null;
        $task->id_label = $data['id_label'] ?? null;
        $task->id_account = $data['id_account'] ?? null;
        $task->create_id_account = $user_id;  // Создатель задачи
        $task->column_id = $data['column_id'] ?? null;
        $task->order = $data['order'] ?? 0;
        $task->date = $data['date'] ?? null;
        $task->title = $data['title'] ?? '';
        $task->descript = $data['descript'] ?? '';
        $task->descript_full = $data['descript_full'] ?? '';
        $files = $data['files'] ?? [];

        $result = $task->create($files);
        RestApi::response($result);
    }

    // Удаление задачи
    if ($action === 'delete') {
        $id = $data['id'] ?? null;
        
        // Проверяем право на удаление
        $taskData = Task::check_task($id);
        ProjectAccess::requirePermission($taskData['id_project'], $user_id, 'delete_task');

        $result = Task::delete($id);
        RestApi::response($result);
    }

    // Установка статуса архивации задачи
    if ($action === 'set_archive') {
        $id = $data['id'] ?? null;
        $archive = $data['archive'] ?? 1;
        
        // Проверяем право на архивирование
        $taskData = Task::check_task($id);
        ProjectAccess::requirePermission($taskData['id_project'], $user_id, 'archive_task');

        $result = Task::setArchive($id, $archive);
        RestApi::response($result);
    }

    // Метод не указан
    if (!$action) {
        RestApi::response(['success' => false, 'error' => 'Укажите метод'], 400);
    }
}

if ($method === 'GET') {
    // Получение задач проекта
    // ?id_project=1 (обязательный)
    // ?archive=0 (неархивные, по умолчанию), ?archive=1 (архивные), ?archive=all (все)
    $user_id = RestApi::getCurrentUserId();
    $id_project = $_GET['id_project'] ?? null;
    
    if (!$id_project) {
        RestApi::response(['success' => false, 'errors' => ['id_project' => 'Проект не указан']], 400);
    }

    // Проверяем доступ к проекту
    ProjectAccess::requireAccess((int)$id_project, $user_id);

    $archive = $_GET['archive'] ?? 0;
    if ($archive === 'all') {
        $archive = null;
    } else {
        $archive = (int)$archive;
    }

    $task = new Task();
    $tasks = $task->getAll($id_project, $archive);
    
    RestApi::response(['success' => true, 'data' => $tasks]);
}

?>
