<?php
header('Content-Type: application/json');
require '../includes/config.php';

if (!is_logged_in()) {
    http_response_code(401);
    echo json_encode(['error' => 'No autenticado']);
    exit;
}

$method = $_SERVER['REQUEST_METHOD'];
$profesorId = $_SESSION['profesor']['id'];

switch ($method) {
    case 'GET':
        try {
            $tipo = $_GET['tipo'] ?? null;
            if ($tipo) {
                $query = "SELECT * FROM cursos WHERE profesor_id = ? AND tipo = ?";
                $stmt = $pdo->prepare($query);
                $stmt->execute([$profesorId, $tipo]);
            } else {
                $query = "SELECT * FROM cursos WHERE profesor_id = ?";
                $stmt = $pdo->prepare($query);
                $stmt->execute([$profesorId]);
            }
            echo json_encode(['success' => true, 'data' => $stmt->fetchAll()]);
        } catch (PDOException $e) {
            http_response_code(500);
            echo json_encode(['error' => 'Error al cargar cursos']);
        }
        break;

    case 'POST':
        $data = json_decode(file_get_contents('php://input'), true);

        if (empty($data['nombre']) || empty($data['tipo'])) {
            http_response_code(400);
            echo json_encode(['error' => 'Nombre y tipo son requeridos']);
            exit;
        }

        try {
            // Validar que no exista otro curso con el mismo nombre y tipo para ese profesor
            $stmt = $pdo->prepare("SELECT id FROM cursos WHERE nombre = ? AND tipo = ? AND profesor_id = ?");
            $stmt->execute([$data['nombre'], $data['tipo'], $profesorId]);
            if ($stmt->fetch()) {
                echo json_encode([
                    'success' => false,
                    'error' => "Ya existe un curso llamado '{$data['nombre']}' de tipo '{$data['tipo']}'."
                ]);
                exit;
            }

            $stmt = $pdo->prepare("
                INSERT INTO cursos (nombre, descripcion, tipo, competencias, docente, horas_trabajadas, estado, profesor_id)
                VALUES (?, ?, ?, ?, ?, ?, ?, ?)
            ");
            $stmt->execute([
                $data['nombre'],
                $data['descripcion'] ?? null,
                $data['tipo'],
                $data['competencias'] ?? null,
                $data['docente'] ?? null,
                $data['horas_trabajadas'] ?? null,
                $data['estado'],
                $profesorId
            ]);

            echo json_encode(['success' => true, 'id' => $pdo->lastInsertId()]);
        } catch (PDOException $e) {
            http_response_code(500);
            echo json_encode(['error' => $e->getMessage()]);
        }

        break;

    case 'PUT':
        $data = json_decode(file_get_contents('php://input'), true);

        if (empty($data['id']) || empty($data['nombre']) || empty($data['tipo'])) {
            http_response_code(400);
            echo json_encode(['error' => 'Datos incompletos']);
            exit;
        }

        try {
            // Verificar que el curso pertenece al profesor
            $stmt = $pdo->prepare("SELECT id FROM cursos WHERE id = ? AND profesor_id = ?");
            $stmt->execute([$data['id'], $profesorId]);

            if (!$stmt->fetch()) {
                http_response_code(403);
                echo json_encode(['error' => 'No autorizado']);
                exit;
            }

            // Validar que no haya otro curso con el mismo nombre y tipo (excluyendo el actual)
            $stmt = $pdo->prepare("SELECT id FROM cursos WHERE nombre = ? AND tipo = ? AND profesor_id = ? AND id != ?");
            $stmt->execute([$data['nombre'], $data['tipo'], $profesorId, $data['id']]);
            if ($stmt->fetch()) {
                echo json_encode([
                    'success' => false,
                    'error' => "Ya existe otro curso llamado '{$data['nombre']}' de tipo '{$data['tipo']}'."
                ]);
                exit;
            }

            $stmt = $pdo->prepare("
                UPDATE cursos SET 
                    nombre = ?, 
                    descripcion = ?, 
                    tipo = ?, 
                    competencias = ?,
                    docente = ?,
                    horas_trabajadas = ?,
                    estado = ?
                WHERE id = ?
            ");
            $stmt->execute([
                $data['nombre'],
                $data['descripcion'] ?? null,
                $data['tipo'],
                $data['competencias'] ?? null,
                $data['docente'] ?? null,
                $data['horas_trabajadas'] ?? null,
                $data['estado'],
                $data['id']
            ]);

            echo json_encode(['success' => true]);
        } catch (PDOException $e) {
            http_response_code(500);
            echo json_encode(['error' => 'Error al actualizar curso']);
        }
        break;

    case 'DELETE':
        $id = $_GET['id'] ?? null;
        if (!$id) {
            http_response_code(400);
            echo json_encode(['error' => 'ID de curso no proporcionado']);
            exit;
        }

        try {
            // Verificar que el curso pertenece al profesor
            $stmt = $pdo->prepare("SELECT id FROM cursos WHERE id = ? AND profesor_id = ?");
            $stmt->execute([$id, $profesorId]);

            if (!$stmt->fetch()) {
                http_response_code(403);
                echo json_encode(['error' => 'No autorizado']);
                exit;
            }

            $stmt = $pdo->prepare("DELETE FROM cursos WHERE id = ?");
            $stmt->execute([$id]);

            echo json_encode(['success' => true]);
        } catch (PDOException $e) {
            http_response_code(500);
            echo json_encode(['error' => 'Error al eliminar curso']);
        }
        break;

    default:
        http_response_code(405);
        echo json_encode(['error' => 'Método no permitido']);
}
?>
