<?php

class Project extends BaseEntity {

    protected $db_name = 'project';

    // Получение всех проектов
    public function getAll() {
        $current_user_id = RestApi::getCurrentUserId();
        
        $projects = Database::select($this->db_name, [
            'id',
            'id_order',
            'name',
            'id_ready',
            'id_admin'
        ], [
            'ORDER' => ['id_order' => 'ASC']
        ]);
        
        // Обрабатываем id_admin для каждого проекта
        return array_map(function($project) use ($current_user_id) {
            $admins = $project['id_admin'] ? json_decode($project['id_admin'], true) : [];
            
            if ($current_user_id && in_array((int)$current_user_id, $admins, true)) {
                $project['id_admin'] = true;
            } else {
                unset($project['id_admin']);
            }
            
            return $project;
        }, $projects);
    }

    // Получение одного проекта
    // $current_user_id — ID текущего пользователя для проверки админства
    public static function get($id, $current_user_id = null) {
        $project = Database::get('project', [
            'id',
            'id_order',
            'name',
            'id_ready',
            'id_admin'
        ], ['id' => $id]);
        
        if ($project) {
            $admins = $project['id_admin'] ? json_decode($project['id_admin'], true) : [];
            
            // Если передан user_id — проверяем админство
            if ($current_user_id && in_array((int)$current_user_id, $admins, true)) {
                $project['id_admin'] = true;
            } else {
                // Не админ — убираем поле
                unset($project['id_admin']);
            }
        }
        
        return $project;
    }

    // Получение id_ready (ID колонки "Готово") по ID проекта
    public static function getReadyColumnId($project_id) {
        $project = Database::get('project', ['id_ready'], ['id' => $project_id]);
        return $project ? (int)$project['id_ready'] : null;
    }

    // Получение колонок проекта
    public static function getColumns($project_id) {
        return Database::select('columns', [
            'id',
            'name_columns',
            'color',
            'id_order'
        ], [
            'id_project' => $project_id,
            'ORDER' => ['id_order' => 'ASC']
        ]);
    }

    // Получение отделов проекта
    public static function getDepartments($project_id) {
        return Database::select('departments', [
            'id',
            'name_departments',
            'color'
        ], [
            'id_project' => $project_id
        ]);
    }

    // Получение всех данных проекта (проект + колонки + отделы + метки)
    public static function getProjectData($project_id) {
        // Получаем ID текущего пользователя для проверки админства
        $current_user_id = RestApi::getCurrentUserId();
        
        $project = self::get($project_id, $current_user_id);
        if (!$project) {
            return null;
        }

        // Получаем метки (глобальные)
        $labels = Database::select('labels', [
            'id',
            'name_labels',
            'icon',
            'color'
        ]);

        return [
            'project' => $project,
            'columns' => self::getColumns($project_id),
            'departments' => self::getDepartments($project_id),
            'labels' => $labels
        ];
    }

    // Проверка является ли пользователь админом проекта
    public static function isAdmin($project_id, $user_id): bool {
        $project = Database::get('project', ['id_admin'], ['id' => $project_id]);
        if (!$project || !$project['id_admin']) {
            return false;
        }
        
        $admins = json_decode($project['id_admin'], true) ?: [];
        return in_array((int)$user_id, $admins, true);
    }
}

?>
