<?php
require_once 'config.php';
require_once 'middleware.php';

header('Content-Type: application/json; charset=utf-8');

$negocio_id = validarToken();
$method     = $_SERVER['REQUEST_METHOD'];
$db         = getDB();
$id         = (int)($_GET['id'] ?? 0);

if ($method === 'GET') {
    $stmt = $db->prepare('SELECT id, url, orden FROM fotos WHERE negocio_id = ? ORDER BY orden ASC, id ASC');
    $stmt->execute([$negocio_id]);
    jsonResponse($stmt->fetchAll());
}

if ($method === 'POST' && !$id) {
    $stmt = $db->prepare('SELECT COUNT(*) FROM fotos WHERE negocio_id = ?');
    $stmt->execute([$negocio_id]);
    if ((int)$stmt->fetchColumn() >= MAX_FOTOS) {
        jsonResponse(['error' => 'Límite de ' . MAX_FOTOS . ' fotos alcanzado'], 400);
    }

    if (empty($_FILES['foto']) || $_FILES['foto']['error'] !== UPLOAD_ERR_OK) {
        jsonResponse(['error' => 'No se recibió imagen válida'], 400);
    }

    $file = $_FILES['foto'];
    if ($file['size'] > MAX_FILE_SIZE) {
        jsonResponse(['error' => 'Archivo demasiado grande (máx. 3 MB)'], 400);
    }

    $url = comprimirYGuardarImagen($file['tmp_name'], $negocio_id, 'fotos');
    if (!$url) {
        jsonResponse(['error' => 'Formato no válido. Solo se aceptan JPG y PNG'], 400);
    }

    $stmt = $db->prepare('SELECT COALESCE(MAX(orden), 0) + 1 FROM fotos WHERE negocio_id = ?');
    $stmt->execute([$negocio_id]);
    $orden = (int)$stmt->fetchColumn();

    $stmt = $db->prepare('INSERT INTO fotos (negocio_id, url, orden) VALUES (?, ?, ?)');
    $stmt->execute([$negocio_id, $url, $orden]);

    jsonResponse(['id' => (int)$db->lastInsertId(), 'url' => $url, 'orden' => $orden], 201);
}

// PUT /fotos.php — reordenar: body JSON = [{id, orden}, ...]
if ($method === 'PUT') {
    $data = getJsonInput();
    if (!is_array($data)) {
        jsonResponse(['error' => 'Se espera un array de {id, orden}'], 400);
    }

    $stmt = $db->prepare('UPDATE fotos SET orden = ? WHERE id = ? AND negocio_id = ?');
    foreach ($data as $item) {
        $stmt->execute([(int)($item['orden'] ?? 0), (int)($item['id'] ?? 0), $negocio_id]);
    }
    jsonResponse(['ok' => true]);
}

// DELETE /fotos.php?id=X  (también acepta POST?_method=DELETE para servidores restrictivos)
if (($method === 'DELETE' || ($method === 'POST' && ($_GET['_method'] ?? '') === 'DELETE')) && $id) {
    $stmt = $db->prepare('SELECT url FROM fotos WHERE id = ? AND negocio_id = ?');
    $stmt->execute([$id, $negocio_id]);
    $foto = $stmt->fetch();

    if (!$foto) {
        jsonResponse(['error' => 'Foto no encontrada'], 404);
    }

    eliminarArchivoUpload($foto['url']);

    $stmt = $db->prepare('DELETE FROM fotos WHERE id = ? AND negocio_id = ?');
    $stmt->execute([$id, $negocio_id]);

    jsonResponse(['ok' => true]);
}

jsonResponse(['error' => 'Método o parámetros no válidos'], 405);
