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

class MarcaController extends DBconnection
{
    public function getMarcas()
    {
        $query = "SELECT
            id,
            nombre,
            logo, 
            destacado,
            status
        FROM marcas
        ORDER BY destacado DESC, nombre ASC, status DESC"; /* Orden mejorado */

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

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

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

        // Verificar si ya existe una marca con ese nombre
        $query = "SELECT COUNT(*) FROM marcas 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 marca con ese nombre']);
            return;
        }

        try {
            $pdo = $this->connect();
            
            // Insertar marca
            $query = "INSERT INTO marcas (nombre, logo, destacado, status) VALUES (?, ?, ?, 1)"; /* Cambiado 'imagen' a 'logo' y añadido 'destacado' */
            $stmt = $pdo->prepare($query);
            $stmt->execute([$nombre, $logo, $destacado]);

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

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

        $query = "SELECT
            id,
            nombre,
            logo, 
            destacado,
            status
        FROM marcas
        WHERE id = ?";

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

        if ($marca) {
            echo json_encode($marca);
        } else {
            echo json_encode(['status' => 'error', 'message' => 'Marca no encontrada']);
        }
    }

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

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

        // Verificar si ya existe otra marca con ese nombre (excepto la actual)
        $query = "SELECT COUNT(*) FROM marcas 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 marca con ese nombre']);
            return;
        }

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

            // Actualizar marca
            $query = "UPDATE marcas SET nombre = ?, logo = ?, destacado = ? WHERE id = ?"; /* Cambiado 'imagen' a 'logo' y añadido 'destacado' */
            $stmt = $pdo->prepare($query);
            $stmt->execute([$nombre, $logo, $destacado, $id]);

            // Si se cambió la imagen y había una anterior, eliminar la anterior
            if ($logo !== $logoActual && $logoActual && $logo) { /* Cambiado 'imagen' a 'logo' */
                $rutaLogoAnterior = __DIR__ . '/../../img/marcas/' . $logoActual;
                if (file_exists($rutaLogoAnterior)) {
                    @unlink($rutaLogoAnterior);
                }
            }

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

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

        // Baja lógica de la marca (cambiar status a 0 y destacado a 0)
        $query = "UPDATE marcas SET status = 0, destacado = 0 WHERE id = ?"; /* Añadido destacado = 0 */
        $stmt = $this->connect()->prepare($query);
        $result = $stmt->execute([$id]);

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

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

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

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