<?php
require_once "{$_SERVER['DOCUMENT_ROOT']}/class/c_login.php";
header('Content-Type: application/json');

if (!Login::is_logged()) {
    header('HTTP/1.1 401 Unauthorized');
    echo json_encode(['error' => 'No se ha iniciado sesión']);
    exit();
}
$user = Login::get_user();

try {
    switch ($_SERVER['REQUEST_METHOD']) {
        case 'GET':
            // Fetch all puestos
            $facultad_id = $user->facultad['facultad_id'];
            $periodo_nivel_id = $db->where('periodo_id', $user->periodo_id)->getOne('periodo', 'nivel_id')['nivel_id'];
            $carreras = $db->query(<<<SQL
                SELECT carrera_id, carrera_nombre, clave_carrera,
                facultad_id, facultad_nombre,
                nivel_id, nivel_nombre
                FROM carrera
                join nivel using (nivel_id)
                join facultad using (facultad_id)
                WHERE facultad_id = :facultad_id OR :facultad_id IS NULL AND
                nivel.nivel_id = :periodo_nivel_id
                ORDER BY facultad_nombre, carrera_nombre    
            SQL, [
                'facultad_id' => $facultad_id,
                'periodo_nivel_id' => $periodo_nivel_id
            ]);
            echo json_encode($carreras);
            break;

        case 'PUT':
            // Update carrera {nivel_id}
            $raw = file_get_contents('php://input');
            $data = json_decode($raw, true);

            if (!isset($data['carrera_id'], $data['nivel_id'])) {
                header('HTTP/1.1 400 Bad Request');
                echo json_encode(['error' => 'Falta el id de la carrera o el nivel']);
                exit();
            }

            $carrera_id = $data['carrera_id'];
            $nivel_id = $data['nivel_id'];
            $db->where('carrera_id', $carrera_id)->update('carrera', ['nivel_id' => $nivel_id]);

            $carrera_nombre = $db->where('carrera_id', $carrera_id)->getOne('carrera', 'carrera_nombre')['carrera_nombre'];
            $nivel_nombre = $db->where('nivel_id', $nivel_id)->getOne('nivel', 'nivel_nombre')['nivel_nombre'];

            echo json_encode(['success' => "$carrera_nombre actualizada a $nivel_nombre"]);
            break;
        default:
            header('HTTP/1.1 405 Method Not Allowed');
            echo json_encode(['error' => 'Método no permitido']);
            break;
    }
} catch (PDOException $e) {
    echo json_encode([
        'error' => $e->getMessage(),
        'query' => $db->getLastQuery(),
        'exception' => $e->getTraceAsString()
    ]);
}