<?php

namespace App\Controllers;

use App\Models\User;
use App\Models\Role;
use App\Services\KeycloakService;
use App\Middleware\AuthMiddleware;

/**
 * Controlador del Dashboard principal
 */
class DashboardController
{
    private $userModel;
    private $roleModel;
    private $keycloakService;
    private $authMiddleware;

    public function __construct()
    {
        $this->userModel = new User();
        $this->roleModel = new Role();
        $this->keycloakService = new KeycloakService();
        $this->authMiddleware = new AuthMiddleware();
    }

    /**
     * Dashboard principal
     */
    public function index(): void
    {
        $this->authMiddleware->requireRole();

        $user = $this->authMiddleware->getCurrentUser();
        
        // Obtener estadísticas según el rol del usuario
        $stats = $this->getDashboardStats($user);

        require_once __DIR__ . '/../../views/dashboard/index.php';
    }

    /**
     * Obtener estadísticas para el dashboard
     */
    private function getDashboardStats(array $user): array
    {
        $stats = [];

        // Estadísticas básicas para todos los usuarios
        $stats['user'] = [
            'name' => $user['first_name'] . ' ' . $user['last_name'],
            'role' => $user['role_display_name'],
            'last_login' => $user['last_login']
        ];

        // Estadísticas adicionales para administradores
        if ($this->authMiddleware->isAdmin()) {
            $stats['users'] = $this->userModel->getUserStats();
            $stats['roles'] = $this->roleModel->getRoleStats();
            
            // Estadísticas de requerimientos
            $requirementsController = new \App\Controllers\RequirementsController();
            $stats['requirements'] = $requirementsController->getStats();
        }

        return $stats;
    }

    /**
     * Panel de perfil del usuario
     */
    public function profile(): void
    {
        $this->authMiddleware->requireRole();

        $user = $this->authMiddleware->getCurrentUser();
        
        require_once __DIR__ . '/../../views/dashboard/profile.php';
    }

    /**
     * Actualizar perfil (solo información permitida)
     */
    public function updateProfile(): void
    {
        header('Content-Type: application/json');
        
        $this->authMiddleware->requireRole();

        if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
            echo json_encode(['error' => 'Método no permitido']);
            exit;
        }

        // Verificar token CSRF
        $csrfToken = $_POST['csrf_token'] ?? '';
        if (!$this->authMiddleware->verifyCsrfToken($csrfToken)) {
            echo json_encode(['error' => 'Token CSRF inválido']);
            exit;
        }

        try {
            $user = $this->authMiddleware->getCurrentUser();
            
            // Por ahora, el perfil se sincroniza desde Keycloak
            // Aquí se podrían agregar campos adicionales que se manejen localmente
            
            echo json_encode([
                'success' => true,
                'message' => 'Los datos del perfil se sincronizan automáticamente con Keycloak'
            ]);

        } catch (\Exception $e) {
            error_log('Profile update error: ' . $e->getMessage());
            echo json_encode(['error' => 'Error al actualizar el perfil']);
        }

        exit;
    }

    /**
     * Página de configuración del sistema (solo admin)
     */
    public function settings(): void
    {
        $this->authMiddleware->requireAdmin();

        $user = $this->authMiddleware->getCurrentUser();
        
        // Obtener configuraciones del sistema
        $config = [
            'app_name' => $_ENV['APP_NAME'] ?? 'Sistema de Gestión de Proyectos',
            'app_env' => $_ENV['APP_ENV'] ?? 'production',
            'keycloak_url' => $_ENV['KEYCLOAK_URL'] ?? '',
            'keycloak_realm' => $_ENV['KEYCLOAK_REALM'] ?? '',
        ];

        require_once __DIR__ . '/../../views/dashboard/settings.php';
    }
}