<?php
require_once __DIR__ . '/../DBconnection.php';

class CategoriaController extends DBconnection
{
    public function getCategorias()
    {
        $query = "SELECT
            id,
            nombre,
            imagen,
            destacado,
            status
        FROM categorias
        ORDER BY destacado DESC, nombre ASC, status DESC";

        $stmt = $this->connect()->prepare($query);
        $stmt->execute();
        $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
        echo json_encode($result);
    }

    public function addCategoria()
    {
        $nombre = $_POST['nombre'];
        $destacado = isset($_POST['destacado']) ? $_POST['destacado'] : 0;
        $imagen = isset($_POST['imagen']) ? $_POST['imagen'] : null;

        // Validar que el nombre no esté vacío
        if (empty($nombre)) {
            echo json_encode(['status' => 'error', 'message' => 'El nombre de categoría es obligatorio']);
            return;
        }

        // Verificar si ya existe una categoría con ese nombre
        $query = "SELECT COUNT(*) FROM categorias WHERE nombre = ?";
        $stmt = $this->connect()->prepare($query);
        $stmt->execute([$nombre]);
        $count = $stmt->fetchColumn();

        if ($count > 0) {
            echo json_encode(['status' => 'error', 'message' => 'Ya existe una categoría con ese nombre']);
            return;
        }

        try {
            $pdo = $this->connect();
            
            // Insertar categoría
            $query = "INSERT INTO categorias (nombre, destacado, imagen, status) VALUES (?, ?, ?, 1)";
            $stmt = $pdo->prepare($query);
            $stmt->execute([$nombre, $destacado, $imagen]);

            echo json_encode(['status' => 'success', 'message' => 'Categoría agregada correctamente']);
        } catch (Exception $e) {
            echo json_encode(['status' => 'error', 'message' => 'Error al agregar la categoría: ' . $e->getMessage()]);
        }
    }

    public function getCategoria()
    {
        $id = $_POST['id'];

        $query = "SELECT
            id,
            nombre,
            imagen,
            destacado,
            status
        FROM categorias
        WHERE id = ?";

        $stmt = $this->connect()->prepare($query);
        $stmt->execute([$id]);
        $categoria = $stmt->fetch(PDO::FETCH_ASSOC);

        if ($categoria) {
            echo json_encode($categoria);
        } else {
            echo json_encode(['status' => 'error', 'message' => 'Categoría no encontrada']);
        }
    }

    public function updateCategoria()
    {
        $id = $_POST['id'];
        $nombre = $_POST['nombre'];
        $destacado = isset($_POST['destacado']) ? $_POST['destacado'] : 0;
        $imagen = isset($_POST['imagen']) ? $_POST['imagen'] : null;

        // Validar que el nombre no esté vacío
        if (empty($nombre)) {
            echo json_encode(['status' => 'error', 'message' => 'El nombre de categoría es obligatorio']);
            return;
        }

        // Verificar si ya existe otra categoría con ese nombre (excepto la actual)
        $query = "SELECT COUNT(*) FROM categorias WHERE nombre = ? AND id != ?";
        $stmt = $this->connect()->prepare($query);
        $stmt->execute([$nombre, $id]);
        $count = $stmt->fetchColumn();

        if ($count > 0) {
            echo json_encode(['status' => 'error', 'message' => 'Ya existe otra categoría con ese nombre']);
            return;
        }

        try {
            $pdo = $this->connect();
            
            // Primero obtener la imagen actual para posible eliminación
            $stmt = $pdo->prepare("SELECT imagen FROM categorias WHERE id = ?");
            $stmt->execute([$id]);
            $categoriaActual = $stmt->fetch(PDO::FETCH_ASSOC);
            $imagenActual = $categoriaActual['imagen'];

            // Actualizar categoría
            $query = "UPDATE categorias SET nombre = ?, destacado = ?, imagen = ? WHERE id = ?";
            $stmt = $pdo->prepare($query);
            $stmt->execute([$nombre, $destacado, $imagen, $id]);

            // Si se cambió la imagen y había una anterior, eliminar la anterior
            if ($imagen !== $imagenActual && $imagenActual && $imagen) {
                $rutaImagenAnterior = __DIR__ . '/../../img/categorias/' . $imagenActual;
                if (file_exists($rutaImagenAnterior)) {
                    @unlink($rutaImagenAnterior);
                }
            }

            echo json_encode(['status' => 'success', 'message' => 'Categoría actualizada correctamente']);
        } catch (Exception $e) {
            echo json_encode(['status' => 'error', 'message' => 'Error al actualizar la categoría: ' . $e->getMessage()]);
        }
    }

    public function deactivateCategoria()
    {
        $id = $_POST['id'];

        // Baja lógica de la categoría (cambiar status a 0)
        $query = "UPDATE categorias SET status = 0, destacado = 0 WHERE id = ?";
        $stmt = $this->connect()->prepare($query);
        $result = $stmt->execute([$id]);

        if ($result) {
            echo json_encode(['status' => 'success', 'message' => 'Categoría eliminada correctamente']);
        } else {
            echo json_encode(['status' => 'error', 'message' => 'Error al eliminar la categoría']);
        }
    }

    public function activateCategoria()
    {
        $id = $_POST['id'];

        // Activar la categoría (cambiar status a 1)
        $query = "UPDATE categorias SET status = 1 WHERE id = ?";
        $stmt = $this->connect()->prepare($query);
        $result = $stmt->execute([$id]);

        if ($result) {
            echo json_encode(['status' => 'success', 'message' => 'Categoría activada correctamente']);
        } else {
            echo json_encode(['status' => 'error', 'message' => 'Error al activar la categoría']);
        }
    }
}