<?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();
$accion     = $_GET['accion'] ?? '';

// GET — datos del negocio
if ($method === 'GET') {
    $stmt = $db->prepare(
        'SELECT nombre, categoria, direccion, telefono, whatsapp, logo_url, imagen_portada,
                descripcion, descripcion_en, facebook, instagram, youtube, tiktok, latitud, longitud
         FROM negocios WHERE id = ?'
    );
    $stmt->execute([$negocio_id]);
    jsonResponse($stmt->fetch());
}

// POST ?accion=actualizar_info — guardar descripción y redes sociales
if ($method === 'POST' && $accion === 'actualizar_info') {
    $data = getJsonInput();

    $descripcion    = isset($data['descripcion'])    ? $data['descripcion']    : null;
    $descripcion_en = isset($data['descripcion_en']) ? $data['descripcion_en'] : null;
    $facebook    = trim($data['facebook']  ?? '');
    $instagram   = trim($data['instagram'] ?? '');
    $youtube     = trim($data['youtube']   ?? '');
    $tiktok      = trim($data['tiktok']    ?? '');

    $db->prepare(
        'UPDATE negocios SET descripcion=?, descripcion_en=?, facebook=?, instagram=?, youtube=?, tiktok=? WHERE id=?'
    )->execute([
        $descripcion    ?: null,
        $descripcion_en ?: null,
        $facebook    ?: null,
        $instagram   ?: null,
        $youtube     ?: null,
        $tiktok      ?: null,
        $negocio_id,
    ]);

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

// POST ?accion=guardar_ubicacion
if ($method === 'POST' && $accion === 'guardar_ubicacion') {
    $data     = getJsonInput();
    $latitud  = isset($data['latitud'])  && $data['latitud']  !== '' ? (float)$data['latitud']  : null;
    $longitud = isset($data['longitud']) && $data['longitud'] !== '' ? (float)$data['longitud'] : null;

    $db->prepare('UPDATE negocios SET latitud=?, longitud=? WHERE id=?')
       ->execute([$latitud, $longitud, $negocio_id]);

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

// POST ?accion=subir_portada — subir foto de portada del local
if ($method === 'POST' && $accion === 'subir_portada') {
    if (empty($_FILES['portada']) || $_FILES['portada']['error'] !== UPLOAD_ERR_OK) {
        jsonResponse(['error' => 'No se recibió imagen válida'], 400);
    }
    if ($_FILES['portada']['size'] > MAX_FILE_SIZE) {
        jsonResponse(['error' => 'Imagen demasiado grande (máx. 3 MB)'], 400);
    }

    $stmt = $db->prepare('SELECT imagen_portada FROM negocios WHERE id = ?');
    $stmt->execute([$negocio_id]);
    $actual = $stmt->fetchColumn();
    // Solo eliminar si es una imagen subida por nosotros (no URL externa del API)
    if ($actual && strpos($actual, UPLOAD_URL) !== false) eliminarArchivoUpload($actual);

    $url = comprimirYGuardarImagen($_FILES['portada']['tmp_name'], $negocio_id, 'portadas');
    if (!$url) jsonResponse(['error' => 'Formato no válido (solo JPG/PNG)'], 400);

    $db->prepare('UPDATE negocios SET imagen_portada = ? WHERE id = ?')
       ->execute([$url, $negocio_id]);

    jsonResponse(['imagen_portada' => $url]);
}

// DELETE ?accion=eliminar_portada — quitar foto de portada
if ($method === 'DELETE' && $accion === 'eliminar_portada') {
    $stmt = $db->prepare('SELECT imagen_portada FROM negocios WHERE id = ?');
    $stmt->execute([$negocio_id]);
    $img = $stmt->fetchColumn();
    if ($img && strpos($img, UPLOAD_URL) !== false) eliminarArchivoUpload($img);
    $db->prepare('UPDATE negocios SET imagen_portada = NULL WHERE id = ?')
       ->execute([$negocio_id]);
    jsonResponse(['ok' => true]);
}

// POST (sin accion) — subir/reemplazar logo
if ($method === 'POST' && $accion === '') {
    if (empty($_FILES['logo']) || $_FILES['logo']['error'] !== UPLOAD_ERR_OK) {
        jsonResponse(['error' => 'No se recibió imagen válida'], 400);
    }
    if ($_FILES['logo']['size'] > MAX_FILE_SIZE) {
        jsonResponse(['error' => 'Imagen demasiado grande (máx. 3 MB)'], 400);
    }

    $stmt = $db->prepare('SELECT logo_url FROM negocios WHERE id = ?');
    $stmt->execute([$negocio_id]);
    $actual = $stmt->fetchColumn();
    if ($actual) eliminarArchivoUpload($actual);

    $url = comprimirYGuardarImagen($_FILES['logo']['tmp_name'], $negocio_id, 'logos');
    if (!$url) jsonResponse(['error' => 'Formato no válido (solo JPG/PNG)'], 400);

    $db->prepare('UPDATE negocios SET logo_url = ? WHERE id = ?')
       ->execute([$url, $negocio_id]);

    jsonResponse(['logo_url' => $url]);
}

// POST ?accion=cambiar_password
if ($method === 'POST' && $accion === 'cambiar_password') {
    $data        = getJsonInput();
    $passActual  = $data['password_actual']    ?? '';
    $passNueva   = trim($data['password_nueva']    ?? '');
    $passConfirm = trim($data['password_confirmar'] ?? '');

    $stmt = $db->prepare('SELECT password_hash FROM negocios WHERE id = ?');
    $stmt->execute([$negocio_id]);
    $hash = $stmt->fetchColumn();

    if (!password_verify($passActual, $hash)) {
        jsonResponse(['error' => 'La contraseña actual es incorrecta'], 400);
    }
    if (strlen($passNueva) < 8) {
        jsonResponse(['error' => 'La nueva contraseña debe tener al menos 8 caracteres'], 400);
    }
    if ($passNueva !== $passConfirm) {
        jsonResponse(['error' => 'Las contraseñas no coinciden'], 400);
    }

    $nuevoHash = password_hash($passNueva, PASSWORD_BCRYPT);
    $db->prepare('UPDATE negocios SET password_hash = ? WHERE id = ?')
       ->execute([$nuevoHash, $negocio_id]);

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

// DELETE — eliminar logo
if ($method === 'DELETE') {
    $stmt = $db->prepare('SELECT logo_url FROM negocios WHERE id = ?');
    $stmt->execute([$negocio_id]);
    $logo = $stmt->fetchColumn();
    if ($logo) {
        eliminarArchivoUpload($logo);
        $db->prepare('UPDATE negocios SET logo_url = NULL WHERE id = ?')
           ->execute([$negocio_id]);
    }
    jsonResponse(['ok' => true]);
}

jsonResponse(['error' => 'Método no permitido'], 405);
