<?php
namespace App\Controllers;

use App\Models\User;
use App\Services\AuthService;
use App\Middleware\RoleMiddleware;

class UserController
{
    private $userModel;
    
    public function __construct()
    {
        // Permitir a administradores y coordinadores
        RoleMiddleware::coordinador();
        $this->userModel = new User();
    }
    
    public function index()
    {
        // Manejar acciones POST (Crear/Editar/Eliminar/Toggle)
        if (isPost()) {
            $action = post('action');
            
            if ($action === 'create') {
                $this->create();
            } elseif ($action === 'update') {
                $this->update();
            } elseif ($action === 'toggle') {
                $this->toggleActive();
            } elseif ($action === 'delete') {
                $this->delete();
            }
        }
        
        // Retornar lista de usuarios para la vista
        return $this->userModel->getAll();
    }
    
    private function create()
    {
        if (!verifyCsrfToken(post('csrf_token'))) {
            flash('error', 'Token de seguridad inválido');
            return;
        }
        
        $username = trim(post('username'));
        
        if ($this->userModel->usernameExists($username)) {
            flash('error', 'El nombre de usuario ya existe');
            return;
        }
        
        $data = [
            'username' => $username,
            'password' => post('password'),
            'full_name' => trim(post('full_name')),
            'role' => post('role'),
            'active' => 1
        ];
        
        if ($_SESSION['role'] === 'coordinador' && post('role') === 'admin') {
            flash('error', 'No tienes permiso para crear administradores');
            redirect(siteUrl('admin/usuarios.php'));
        }

        if ($this->userModel->create($data)) {
            flash('success', 'Usuario creado correctamente');
        } else {
            flash('error', 'Error al crear usuario');
        }
        
        redirect(siteUrl('admin/usuarios.php'));
    }
    
    private function update()
    {
        if (!verifyCsrfToken(post('csrf_token'))) {
            flash('error', 'Token de seguridad inválido');
            return;
        }
        
        $id = post('id');
        $username = trim(post('username'));
        
        if ($this->userModel->usernameExists($username, $id)) {
            flash('error', 'El nombre de usuario ya existe');
            return;
        }
        
        $data = [
            'username' => $username,
            'full_name' => trim(post('full_name')),
            'role' => post('role')
        ];
        
        if (post('password')) {
            $data['password'] = post('password');
        }
        
        $targetUser = $this->userModel->findById($id);
        if (!$targetUser) {
            flash('error', 'Usuario no encontrado');
            redirect(siteUrl('admin/usuarios.php'));
        }

        if ($_SESSION['role'] === 'coordinador') {
            if ($targetUser['role'] === 'admin' || post('role') === 'admin') {
                flash('error', 'No tienes permiso para modificar administradores');
                redirect(siteUrl('admin/usuarios.php'));
            }
        }
        
        if ($this->userModel->update($id, $data)) {
            flash('success', 'Usuario actualizado correctamente');
        } else {
            flash('error', 'Error al actualizar usuario');
        }
        
        redirect(siteUrl('admin/usuarios.php'));
    }
    
    private function toggleActive()
    {
        // Validación CSRF simple o via POST directo
        $id = post('id');
        
        // Prevenir desactivarse a sí mismo
        if ($id == $_SESSION['user_id']) {
            flash('error', 'No puedes desactivar tu propia cuenta');
        } else {
            $targetUser = $this->userModel->findById($id);
            if ($_SESSION['role'] === 'coordinador' && $targetUser && $targetUser['role'] === 'admin') {
                flash('error', 'No tienes permiso para desactivar administradores');
            } else {
                $this->userModel->toggleActive($id);
                flash('success', 'Estado del usuario actualizado');
            }
        }
        
        redirect(siteUrl('admin/usuarios.php'));
    }
    
    private function delete()
    {
        if (!verifyCsrfToken(post('csrf_token'))) {
            flash('error', 'Token de seguridad inválido');
            return;
        }

        $id = post('id');
        
        if ($id == $_SESSION['user_id']) {
            flash('error', 'No puedes eliminar tu propia cuenta');
        } else {
            $targetUser = $this->userModel->findById($id);
            if ($_SESSION['role'] === 'coordinador' && $targetUser && $targetUser['role'] === 'admin') {
                flash('error', 'No tienes permiso para eliminar administradores');
            } else {
                $this->userModel->delete($id);
                flash('success', 'Usuario eliminado');
            }
        }
        
        redirect(siteUrl('admin/usuarios.php'));
    }
}
