<?php

$method = $_SERVER['REQUEST_METHOD'];

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

    // Получение данных проекта (проект + колонки + отделы)
    if ($action === 'get_project_data') {
        $project_id = $data['id_project'] ?? null;
        
        // Проверяем доступ к проекту
        ProjectAccess::requireAccess($project_id, $user_id);
        
        $result = Project::getProjectData($project_id);
        if ($result) {
            RestApi::response(['success' => true, 'data' => $result]);
        } else {
            RestApi::response(['success' => false, 'errors' => ['project' => 'Проект не найден']], 404);
        }
    }

    // ==================== CRUD ПРОЕКТОВ ====================

    // Создание проекта
    if ($action === 'create') {
        $name = trim($data['name'] ?? '');
        if (!$name) {
            RestApi::response(['success' => false, 'errors' => ['name' => 'Укажите название проекта']], 400);
        }
        $result = Project::create($name, $user_id);
        RestApi::response($result, $result['success'] ? 200 : 400);
    }

    // Обновление проекта
    if ($action === 'update') {
        $id = $data['id'] ?? null;
        $name = trim($data['name'] ?? '');
        if (!$id || !$name) {
            RestApi::response(['success' => false, 'errors' => ['data' => 'Укажите ID и название']], 400);
        }
        $result = Project::update($id, $name, $user_id);
        RestApi::response($result, $result['success'] ? 200 : 403);
    }

    // Удаление проекта
    if ($action === 'delete') {
        $id = $data['id'] ?? null;
        if (!$id) {
            RestApi::response(['success' => false, 'errors' => ['id' => 'Укажите ID проекта']], 400);
        }
        $result = Project::delete($id, $user_id);
        RestApi::response($result, $result['success'] ? 200 : 403);
    }

    // Обновление порядка проектов
    if ($action === 'update_order') {
        $ids = $data['ids'] ?? [];
        if (empty($ids)) {
            RestApi::response(['success' => false, 'errors' => ['ids' => 'Укажите массив ID']], 400);
        }
        $result = Project::updateOrder($ids, $user_id);
        RestApi::response($result);
    }

    // ==================== CRUD КОЛОНОК ====================

    // Добавление колонки
    if ($action === 'add_column') {
        $project_id = $data['project_id'] ?? null;
        $name = trim($data['name'] ?? '');
        $color = $data['color'] ?? '#6366f1';
        if (!$project_id || !$name) {
            RestApi::response(['success' => false, 'errors' => ['data' => 'Укажите project_id и name']], 400);
        }
        $result = Project::addColumn($project_id, $name, $color, $user_id);
        RestApi::response($result, $result['success'] ? 200 : 403);
    }

    // Обновление колонки
    if ($action === 'update_column') {
        $id = $data['id'] ?? null;
        $name = isset($data['name']) ? trim($data['name']) : null;
        $color = $data['color'] ?? null;
        if (!$id) {
            RestApi::response(['success' => false, 'errors' => ['id' => 'Укажите ID колонки']], 400);
        }
        $result = Project::updateColumn($id, $name, $color, $user_id);
        RestApi::response($result, $result['success'] ? 200 : 403);
    }

    // Получение количества задач в колонке (для подтверждения удаления)
    if ($action === 'get_column_tasks_count') {
        $id = $data['id'] ?? null;
        if (!$id) {
            RestApi::response(['success' => false, 'errors' => ['id' => 'Укажите ID колонки']], 400);
        }
        $count = Project::getColumnTasksCount($id);
        RestApi::response(['success' => true, 'count' => $count]);
    }

    // Удаление колонки
    if ($action === 'delete_column') {
        $id = $data['id'] ?? null;
        if (!$id) {
            RestApi::response(['success' => false, 'errors' => ['id' => 'Укажите ID колонки']], 400);
        }
        $result = Project::deleteColumn($id, $user_id);
        RestApi::response($result, $result['success'] ? 200 : 403);
    }

    // Обновление порядка колонок
    if ($action === 'update_columns_order') {
        $project_id = $data['project_id'] ?? null;
        $ids = $data['ids'] ?? [];
        if (!$project_id || empty($ids)) {
            RestApi::response(['success' => false, 'errors' => ['data' => 'Укажите project_id и ids']], 400);
        }
        $result = Project::updateColumnsOrder($project_id, $ids, $user_id);
        RestApi::response($result, $result['success'] ? 200 : 403);
    }

    // Установка финальной колонки
    if ($action === 'set_ready_column') {
        $project_id = $data['project_id'] ?? null;
        $column_id = $data['column_id'] ?? null;
        if (!$project_id || !$column_id) {
            RestApi::response(['success' => false, 'errors' => ['data' => 'Укажите project_id и column_id']], 400);
        }
        $result = Project::setReadyColumn($project_id, $column_id, $user_id);
        RestApi::response($result, $result['success'] ? 200 : 403);
    }

    // ==================== CRUD ОТДЕЛОВ ====================

    // Добавление отдела
    if ($action === 'add_department') {
        $project_id = $data['project_id'] ?? null;
        $name = trim($data['name'] ?? '');
        $color = $data['color'] ?? '#6366f1';
        if (!$project_id || !$name) {
            RestApi::response(['success' => false, 'errors' => ['data' => 'Укажите project_id и name']], 400);
        }
        $result = Project::addDepartment($project_id, $name, $color, $user_id);
        RestApi::response($result, $result['success'] ? 200 : 403);
    }

    // Обновление отдела
    if ($action === 'update_department') {
        $id = $data['id'] ?? null;
        $name = isset($data['name']) ? trim($data['name']) : null;
        $color = $data['color'] ?? null;
        if (!$id) {
            RestApi::response(['success' => false, 'errors' => ['id' => 'Укажите ID отдела']], 400);
        }
        $result = Project::updateDepartment($id, $name, $color, $user_id);
        RestApi::response($result, $result['success'] ? 200 : 403);
    }

    // Получение количества задач в отделе (для подтверждения удаления)
    if ($action === 'get_department_tasks_count') {
        $id = $data['id'] ?? null;
        if (!$id) {
            RestApi::response(['success' => false, 'errors' => ['id' => 'Укажите ID отдела']], 400);
        }
        $count = Project::getDepartmentTasksCount($id);
        RestApi::response(['success' => true, 'count' => $count]);
    }

    // Удаление отдела
    if ($action === 'delete_department') {
        $id = $data['id'] ?? null;
        if (!$id) {
            RestApi::response(['success' => false, 'errors' => ['id' => 'Укажите ID отдела']], 400);
        }
        $result = Project::deleteDepartment($id, $user_id);
        RestApi::response($result, $result['success'] ? 200 : 403);
    }

    // Обновление порядка отделов
    if ($action === 'update_departments_order') {
        $project_id = $data['project_id'] ?? null;
        $ids = $data['ids'] ?? [];
        if (!$project_id || empty($ids)) {
            RestApi::response(['success' => false, 'errors' => ['data' => 'Укажите project_id и ids']], 400);
        }
        $result = Project::updateDepartmentsOrder($project_id, $ids, $user_id);
        RestApi::response($result, $result['success'] ? 200 : 403);
    }

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

if ($method === 'GET') {
    // Получение всех проектов (только те, где пользователь участник)
    // ?active=ID — дополнительно вернуть данные активного проекта
    $user_id = RestApi::getCurrentUserId();
    
    $project = new Project();
    $projects = $project->getAll();
    
    $active_id = $_GET['active'] ?? null;
    
    $activeData = null;
    
    if ($active_id && ProjectAccess::isMember((int)$active_id, $user_id)) {
        // Есть доступ — возвращаем данные активного проекта
        $activeData = Project::getProjectData((int)$active_id);
    }
    
    if ($activeData) {
        RestApi::response([
            'success' => true, 
            'data' => [
                'projects' => $projects,
                'active' => $activeData
            ]
        ]);
    } else {
        // Нет active или нет доступа — возвращаем только список
        RestApi::response(['success' => true, 'data' => $projects]);
    }
}

?>
