<?php
/**
 * TechShop Perú - Panel Admin Aislado: Gestión Completa de Productos
 * CRUD + Subida de imágenes + Importación masiva CSV
 */
define('SECURE_ACCESS', true);
require_once __DIR__ . '/../includes/config.php';
require_once __DIR__ . '/../includes/database.php';
require_once __DIR__ . '/../includes/functions.php';

require_admin();
$db = db();

/* ---- EXPORTAR CSV ---- */
if (isset($_GET['export']) && $_GET['export'] === 'csv') {
    header('Content-Type: text/csv; charset=utf-8');
    header('Content-Disposition: attachment; filename=inventario_' . date('Ymd_His') . '.csv');
    $out = fopen('php://output', 'w');
    fprintf($out, chr(0xEF).chr(0xBB).chr(0xBF));
    fputcsv($out, ['ID','SKU','Nombre','Categoria','Marca','Precio','Precio_Oferta','Stock','Descripcion_Corta','Destacado','En_Oferta','Activo','Slug']);
    $rows = $db->query('SELECT p.*,c.nombre AS cat,m.nombre AS marca FROM productos p JOIN categorias c ON p.categoria_id=c.id JOIN marcas m ON p.marca_id=m.id ORDER BY p.nombre')->fetchAll();
    foreach ($rows as $r) {
        fputcsv($out, [$r['id'],$r['sku']??'',$r['nombre'],$r['cat'],$r['marca'],$r['precio'],$r['precio_oferta']??0,$r['stock'],$r['descripcion_corta']??'',$r['destacado']?'SI':'NO',$r['en_oferta']?'SI':'NO',$r['activo']?'SI':'NO',$r['slug']??'']);
    }
    fclose($out); exit;
}

/* ---- DESCARGAR PLANTILLA CSV ---- */
if (isset($_GET['plantilla'])) {
    header('Content-Type: text/csv; charset=utf-8');
    header('Content-Disposition: attachment; filename=plantilla_productos.csv');
    $out = fopen('php://output', 'w');
    fprintf($out, chr(0xEF).chr(0xBB).chr(0xBF));
    fputcsv($out, ['SKU','Nombre','categoria_id','marca_id','Precio','Precio_Oferta','Stock','Descripcion_Corta','Descripcion_Larga','Destacado(1/0)','En_Oferta(1/0)']);
    fputcsv($out, ['SKU-001','Laptop ejemplo','1','1','1299.90','999.90','10','Descripción corta del producto','Descripción completa','1','1']);
    fclose($out); exit;
}

/* ---- IMPORTAR MASIVO CSV ---- */
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['archivo_csv'])) {
    if (!csrf_verify()) { set_flash('error','Token CSRF inválido.'); redirect('panel-admin-tech/productos.php'); }
    $file = $_FILES['archivo_csv'];
    if ($file['error'] !== UPLOAD_ERR_OK || strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)) !== 'csv') {
        set_flash('error','Archivo CSV inválido.'); redirect('panel-admin-tech/productos.php');
    }
    if ($file['size'] > 5 * 1024 * 1024) {
        set_flash('error','El archivo CSV supera el máximo de 5MB.'); redirect('panel-admin-tech/productos.php');
    }
    $handle = fopen($file['tmp_name'], 'r');
    fgetcsv($handle); // skip header
    $ok = $err = 0;
    $ins = $db->prepare('INSERT INTO productos (sku,nombre,categoria_id,marca_id,precio,precio_oferta,stock,descripcion_corta,destacado,en_oferta,slug,activo) VALUES (?,?,?,?,?,?,?,?,?,?,?,1) ON DUPLICATE KEY UPDATE nombre=VALUES(nombre),precio=VALUES(precio),stock=VALUES(stock)');
    while (($row = fgetcsv($handle)) !== false) {
        if (count($row) < 7) continue;
        $slug = strtolower(preg_replace('/[^a-z0-9]+/i','-',iconv('UTF-8','ASCII//TRANSLIT',$row[1]??''))).'-'.time().rand(10,99);
        try {
            $ins->execute([$row[0]??null,$row[1]??'',(int)($row[2]??1),(int)($row[3]??1),(float)($row[4]??0),(float)($row[5]??0)??null,(int)($row[6]??0),$row[7]??'',(int)($row[9]??0),(int)($row[10]??0),$slug]);
            $ok++;
        } catch(Exception $e) { $err++; }
    }
    fclose($handle);
    set_flash('success',"Importación completada: $ok productos procesados. Errores: $err.");
    redirect('panel-admin-tech/productos.php');
}

/* ---- GUARDAR / EDITAR PRODUCTO ---- */
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['save_product'])) {
    if (!csrf_verify()) { set_flash('error','Token CSRF inválido.'); redirect('panel-admin-tech/productos.php'); }
    
    $pid     = (int)($_POST['producto_id'] ?? 0);
    $nombre  = trim($_POST['nombre'] ?? '');
    $catid   = (int)($_POST['categoria_id'] ?? 0);
    $marcaid = (int)($_POST['marca_id'] ?? 0);
    $precio  = (float)($_POST['precio'] ?? 0);
    $p_oferta = !empty($_POST['precio_oferta']) ? (float)$_POST['precio_oferta'] : null;
    $stock   = max(0,(int)($_POST['stock'] ?? 0));
    $sku     = trim($_POST['sku'] ?? '');
    $desc_c  = trim($_POST['descripcion_corta'] ?? '');
    $desc_l  = trim($_POST['descripcion_larga'] ?? '');
    $dest    = isset($_POST['destacado']) ? 1 : 0;
    $oferta  = isset($_POST['en_oferta']) ? 1 : 0;
    $activo  = isset($_POST['activo']) ? 1 : 0;

    if (empty($nombre) || $catid < 1 || $marcaid < 1 || $precio <= 0) {
        set_flash('error','Por favor completa todos los campos obligatorios.');
        redirect('panel-admin-tech/productos.php');
    }

    $slug = strtolower(preg_replace('/[^a-z0-9]+/i','-',iconv('UTF-8','ASCII//TRANSLIT',$nombre)));
    
    /* Subida de imagen (validación centralizada en save_uploaded_image) */
    $imagen = null;
    if (!empty($_FILES['imagen']['name'])) {
        $subida = save_uploaded_image($_FILES['imagen'], 'products', 'prod', 3 * 1024 * 1024, ['jpg', 'jpeg', 'png', 'webp', 'gif'], 'imagen');
        if (!$subida['ok']) {
            set_flash('error', $subida['error']);
            redirect('panel-admin-tech/productos.php');
        }
        $imagen = $subida['path'];
    }

    if ($pid > 0) {
        /* UPDATE */
        if ($imagen) {
            $stmt = $db->prepare('UPDATE productos SET nombre=?,categoria_id=?,marca_id=?,precio=?,precio_oferta=?,stock=?,sku=?,descripcion_corta=?,descripcion=?,destacado=?,en_oferta=?,activo=?,slug=?,imagen_principal=? WHERE id=?');
            $stmt->execute([$nombre,$catid,$marcaid,$precio,$p_oferta,$stock,$sku,$desc_c,$desc_l,$dest,$oferta,$activo,$slug,$imagen,$pid]);
        } else {
            $stmt = $db->prepare('UPDATE productos SET nombre=?,categoria_id=?,marca_id=?,precio=?,precio_oferta=?,stock=?,sku=?,descripcion_corta=?,descripcion=?,destacado=?,en_oferta=?,activo=?,slug=? WHERE id=?');
            $stmt->execute([$nombre,$catid,$marcaid,$precio,$p_oferta,$stock,$sku,$desc_c,$desc_l,$dest,$oferta,$activo,$slug,$pid]);
        }
        set_flash('success','Producto actualizado correctamente.');
    } else {
        /* INSERT */
        $stmt = $db->prepare('INSERT INTO productos (nombre,categoria_id,marca_id,precio,precio_oferta,stock,sku,descripcion_corta,descripcion,destacado,en_oferta,activo,slug,imagen_principal) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)');
        $stmt->execute([$nombre,$catid,$marcaid,$precio,$p_oferta,$stock,$sku,$desc_c,$desc_l,$dest,$oferta,$activo,$slug,$imagen]);
        set_flash('success','Producto creado exitosamente.');
    }
    csrf_regenerate();
    redirect('panel-admin-tech/productos.php');
}

/* ---- ELIMINAR PRODUCTO ---- */
if (isset($_GET['delete']) && is_numeric($_GET['delete'])) {
    if (!csrf_verify_get()) { set_flash('error','Token inválido.'); redirect('panel-admin-tech/productos.php'); }
    $db->prepare('DELETE FROM productos WHERE id=?')->execute([(int)$_GET['delete']]);
    set_flash('success','Producto eliminado.');
    redirect('panel-admin-tech/productos.php');
}

/* ---- CARGAR DATOS ---- */
$categorias = $db->query('SELECT id,nombre FROM categorias WHERE activo=1 ORDER BY nombre')->fetchAll();
$marcas     = $db->query('SELECT id,nombre FROM marcas WHERE activo=1 ORDER BY nombre')->fetchAll();

$search = trim($_GET['q'] ?? '');
$cat_f  = (int)($_GET['cat'] ?? 0);
$where  = []; $params = [];
if ($search) { $where[] = '(p.nombre LIKE ? OR p.sku LIKE ?)'; $params[] = "%$search%"; $params[] = "%$search%"; }
if ($cat_f)  { $where[] = 'p.categoria_id=?'; $params[] = $cat_f; }
$sql = 'SELECT p.*,c.nombre AS cat,m.nombre AS marca FROM productos p JOIN categorias c ON p.categoria_id=c.id JOIN marcas m ON p.marca_id=m.id' . ($where ? ' WHERE '.implode(' AND ',$where) : '') . ' ORDER BY p.fecha_creacion DESC LIMIT 200';
$stmt = $db->prepare($sql); $stmt->execute($params);
$productos = $stmt->fetchAll();

// Cargar producto para editar
$edit_prod = null;
if (isset($_GET['edit']) && is_numeric($_GET['edit'])) {
    $e = $db->prepare('SELECT * FROM productos WHERE id=?');
    $e->execute([(int)$_GET['edit']]);
    $edit_prod = $e->fetch();
}

$page_title = 'Gestión de Productos';
require_once __DIR__ . '/views/layout.php';
?>

<!-- Botones principales -->
<div class="d-flex justify-content-between align-items-center mb-4 flex-wrap gap-2">
  <h5 class="fw-bold mb-0"><i class="bi bi-box-seam me-2 text-primary"></i>Catálogo de Productos (<?= count($productos) ?>)</h5>
  <div class="d-flex gap-2 flex-wrap">
    <a href="<?= url('panel-admin-tech/productos.php?plantilla') ?>" class="btn btn-outline-secondary btn-sm"><i class="bi bi-file-earmark-arrow-down me-1"></i>Plantilla CSV</a>
    <a href="<?= url('panel-admin-tech/productos.php?export=csv') ?>" class="btn btn-success btn-sm"><i class="bi bi-file-earmark-excel me-1"></i>Exportar CSV</a>
    <button class="btn btn-primary btn-sm" data-bs-toggle="modal" data-bs-target="#modalProducto" onclick="resetForm()"><i class="bi bi-plus-lg me-1"></i>Nuevo Producto</button>
    <button class="btn btn-info btn-sm text-white" data-bs-toggle="modal" data-bs-target="#modalImportar"><i class="bi bi-upload me-1"></i>Importar CSV Masivo</button>
  </div>
</div>

<!-- Filtros -->
<form class="row g-2 mb-4 bg-white p-3 rounded shadow-sm" method="GET" action="<?= url('panel-admin-tech/productos.php') ?>">
  <div class="col-md-6">
    <input type="text" name="q" class="form-control" placeholder="🔍 Buscar por nombre o SKU..." value="<?= e($search) ?>">
  </div>
  <div class="col-md-4">
    <select name="cat" class="form-select">
      <option value="">Todas las categorías</option>
      <?php foreach ($categorias as $c): ?>
        <option value="<?= $c['id'] ?>" <?= $cat_f == $c['id'] ? 'selected' : '' ?>><?= e($c['nombre']) ?></option>
      <?php endforeach; ?>
    </select>
  </div>
  <div class="col-md-2"><button type="submit" class="btn btn-primary w-100">Filtrar</button></div>
</form>

<!-- Tabla de productos -->
<div class="table-responsive bg-white rounded shadow-sm">
  <table class="table table-hover align-middle mb-0">
    <thead class="table-dark">
      <tr>
        <th>Imagen</th><th>Nombre / SKU</th><th>Categoría</th><th>Marca</th>
        <th>Precio</th><th>Stock</th><th>Estado</th><th>Acciones</th>
      </tr>
    </thead>
    <tbody>
      <?php if (empty($productos)): ?>
        <tr><td colspan="8" class="text-center py-4 text-muted">No hay productos. ¡Crea el primero!</td></tr>
      <?php endif; ?>
      <?php foreach ($productos as $p): ?>
      <tr>
        <td>
          <?php $img = $p['imagen_principal'] ?? null; ?>
          <?php if ($img && file_exists(UPLOADS_PATH.'products'.DIRECTORY_SEPARATOR.$img)): ?>
            <img src="<?= url(UPLOADS_URL.'/products/'.$img) ?>" alt="" style="width:50px;height:50px;object-fit:cover;border-radius:6px;">
          <?php else: ?>
            <div style="width:50px;height:50px;background:#e2e8f0;border-radius:6px;display:flex;align-items:center;justify-content:center;"><i class="bi bi-image text-muted"></i></div>
          <?php endif; ?>
        </td>
        <td>
          <div class="fw-medium"><?= e($p['nombre']) ?></div>
          <small class="text-muted"><?= e($p['sku'] ?? 'Sin SKU') ?></small>
        </td>
        <td><span class="badge bg-light text-dark border"><?= e($p['cat']) ?></span></td>
        <td><span class="badge bg-secondary"><?= e($p['marca']) ?></span></td>
        <td>
          <div class="fw-bold text-primary">S/ <?= number_format($p['precio'],2) ?></div>
          <?php if ($p['precio_oferta']): ?><small class="text-success">Oferta: S/ <?= number_format($p['precio_oferta'],2) ?></small><?php endif; ?>
        </td>
        <td>
          <span class="badge <?= $p['stock'] <= 0 ? 'bg-danger' : ($p['stock'] <= 5 ? 'bg-warning text-dark' : 'bg-success') ?>">
            <?= (int)$p['stock'] ?> uds
          </span>
        </td>
        <td>
          <?= $p['activo'] ? '<span class="badge bg-success">Activo</span>' : '<span class="badge bg-secondary">Inactivo</span>' ?>
          <?= $p['destacado'] ? '<span class="badge bg-warning text-dark">⭐</span>' : '' ?>
          <?= $p['en_oferta'] ? '<span class="badge bg-danger">🔥Oferta</span>' : '' ?>
        </td>
        <td>
          <button class="btn btn-primary btn-sm" onclick="editProducto(<?= htmlspecialchars(json_encode($p), ENT_QUOTES) ?>)" title="Editar"><i class="bi bi-pencil"></i></button>
          <a href="<?= url('panel-admin-tech/productos.php?delete='.$p['id'].'&csrf='.csrf_token()) ?>" class="btn btn-danger btn-sm" onclick="return confirm('¿Eliminar este producto definitivamente?')" title="Eliminar"><i class="bi bi-trash"></i></a>
        </td>
      </tr>
      <?php endforeach; ?>
    </tbody>
  </table>
</div>

<!-- ===== MODAL CREAR / EDITAR ===== -->
<div class="modal fade" id="modalProducto" tabindex="-1" aria-labelledby="modalProductoLabel" aria-hidden="true">
  <div class="modal-dialog modal-lg">
    <form method="POST" enctype="multipart/form-data" id="formProducto">
      <?= csrf_field() ?>
      <input type="hidden" name="save_product" value="1">
      <input type="hidden" name="producto_id" id="prod_id" value="0">
      <div class="modal-content">
        <div class="modal-header bg-primary text-white">
          <h5 class="modal-title" id="modalProductoLabel"><i class="bi bi-box-seam me-2"></i>Producto</h5>
          <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
        </div>
        <div class="modal-body">
          <div class="row g-3">
            <div class="col-md-8">
              <label class="form-label fw-medium">Nombre del Producto <span class="text-danger">*</span></label>
              <input type="text" class="form-control" name="nombre" id="prod_nombre" required>
            </div>
            <div class="col-md-4">
              <label class="form-label fw-medium">SKU</label>
              <input type="text" class="form-control" name="sku" id="prod_sku" placeholder="Ej: LAP-001">
            </div>
            <div class="col-md-6">
              <label class="form-label fw-medium">Categoría <span class="text-danger">*</span></label>
              <select class="form-select" name="categoria_id" id="prod_cat" required>
                <option value="">Seleccionar...</option>
                <?php foreach ($categorias as $c): ?>
                  <option value="<?= $c['id'] ?>"><?= e($c['nombre']) ?></option>
                <?php endforeach; ?>
              </select>
            </div>
            <div class="col-md-6">
              <label class="form-label fw-medium">Marca <span class="text-danger">*</span></label>
              <select class="form-select" name="marca_id" id="prod_marca" required>
                <option value="">Seleccionar...</option>
                <?php foreach ($marcas as $m): ?>
                  <option value="<?= $m['id'] ?>"><?= e($m['nombre']) ?></option>
                <?php endforeach; ?>
              </select>
            </div>
            <div class="col-md-4">
              <label class="form-label fw-medium">Precio Normal (S/) <span class="text-danger">*</span></label>
              <input type="number" class="form-control" name="precio" id="prod_precio" step="0.01" min="0" required>
            </div>
            <div class="col-md-4">
              <label class="form-label fw-medium">Precio Oferta (S/)</label>
              <input type="number" class="form-control" name="precio_oferta" id="prod_p_oferta" step="0.01" min="0" placeholder="Dejar vacío si no aplica">
            </div>
            <div class="col-md-4">
              <label class="form-label fw-medium">Stock <span class="text-danger">*</span></label>
              <input type="number" class="form-control" name="stock" id="prod_stock" min="0" value="0" required>
            </div>
            <div class="col-12">
              <label class="form-label fw-medium">Descripción Corta</label>
              <input type="text" class="form-control" name="descripcion_corta" id="prod_desc_c" placeholder="Máx. 160 caracteres">
            </div>
            <div class="col-12">
              <label class="form-label fw-medium">Descripción Larga / Especificaciones</label>
              <textarea class="form-control" name="descripcion_larga" id="prod_desc_l" rows="5"></textarea>
            </div>
            <div class="col-12">
              <label class="form-label fw-medium">Imagen del Producto</label>
              <input type="file" class="form-control" name="imagen" id="prod_imagen" accept="image/*" onchange="previewImg(this)">
              <div id="imgPreviewWrap" class="mt-2 d-none">
                <img id="imgPreview" src="" alt="Preview" style="max-height:120px;border-radius:8px;border:1px solid #dee2e6;">
              </div>
              <div id="imgActualWrap" class="mt-2"></div>
            </div>
            <div class="col-12">
              <div class="d-flex gap-4 flex-wrap">
                <div class="form-check form-switch">
                  <input class="form-check-input" type="checkbox" name="activo" id="prod_activo">
                  <label class="form-check-label" for="prod_activo">Activo (visible en tienda)</label>
                </div>
                <div class="form-check form-switch">
                  <input class="form-check-input" type="checkbox" name="destacado" id="prod_destacado">
                  <label class="form-check-label" for="prod_destacado">⭐ Producto Destacado</label>
                </div>
                <div class="form-check form-switch">
                  <input class="form-check-input" type="checkbox" name="en_oferta" id="prod_oferta">
                  <label class="form-check-label" for="prod_oferta">🔥 En Oferta</label>
                </div>
              </div>
            </div>
          </div>
        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancelar</button>
          <button type="submit" class="btn btn-primary"><i class="bi bi-save me-1"></i>Guardar Producto</button>
        </div>
      </div>
    </form>
  </div>
</div>

<!-- ===== MODAL IMPORTAR CSV ===== -->
<div class="modal fade" id="modalImportar" tabindex="-1" aria-hidden="true">
  <div class="modal-dialog">
    <form method="POST" enctype="multipart/form-data">
      <?= csrf_field() ?>
      <div class="modal-content">
        <div class="modal-header bg-info text-white">
          <h5 class="modal-title"><i class="bi bi-upload me-2"></i>Importación Masiva de Productos</h5>
          <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
        </div>
        <div class="modal-body">
          <div class="alert alert-info">
            <i class="bi bi-info-circle me-2"></i>
            <strong>Instrucciones:</strong><br>
            1. Descarga la <a href="<?= url('panel-admin-tech/productos.php?plantilla') ?>" class="fw-bold">plantilla CSV de ejemplo</a><br>
            2. Rellena los datos de tus productos en Excel<br>
            3. Guarda como CSV UTF-8 y súbelo aquí<br>
            <small class="text-muted">Soporta carga de miles de productos simultáneamente.</small>
          </div>
          <div class="mb-3">
            <label class="form-label fw-medium">Archivo CSV <span class="text-danger">*</span></label>
            <input type="file" name="archivo_csv" class="form-control" accept=".csv" required>
          </div>
        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancelar</button>
          <button type="submit" class="btn btn-info text-white"><i class="bi bi-upload me-1"></i>Importar Ahora</button>
        </div>
      </div>
    </form>
  </div>
</div>

<script>
function resetForm() {
  document.getElementById('prod_id').value = '0';
  document.getElementById('prod_nombre').value = '';
  document.getElementById('prod_sku').value = '';
  document.getElementById('prod_cat').value = '';
  document.getElementById('prod_marca').value = '';
  document.getElementById('prod_precio').value = '';
  document.getElementById('prod_p_oferta').value = '';
  document.getElementById('prod_stock').value = '0';
  document.getElementById('prod_desc_c').value = '';
  document.getElementById('prod_desc_l').value = '';
  document.getElementById('prod_activo').checked = true;
  document.getElementById('prod_destacado').checked = false;
  document.getElementById('prod_oferta').checked = false;
  document.getElementById('imgPreviewWrap').classList.add('d-none');
  document.getElementById('imgActualWrap').innerHTML = '';
  document.querySelector('#modalProductoLabel').textContent = '✚ Nuevo Producto';
}

function editProducto(p) {
  document.getElementById('prod_id').value = p.id;
  document.getElementById('prod_nombre').value = p.nombre;
  document.getElementById('prod_sku').value = p.sku || '';
  document.getElementById('prod_cat').value = p.categoria_id;
  document.getElementById('prod_marca').value = p.marca_id;
  document.getElementById('prod_precio').value = p.precio;
  document.getElementById('prod_p_oferta').value = p.precio_oferta || '';
  document.getElementById('prod_stock').value = p.stock;
  document.getElementById('prod_desc_c').value = p.descripcion_corta || '';
  document.getElementById('prod_desc_l').value = p.descripcion || '';
  document.getElementById('prod_activo').checked = p.activo == 1;
  document.getElementById('prod_destacado').checked = p.destacado == 1;
  document.getElementById('prod_oferta').checked = p.en_oferta == 1;
  document.getElementById('imgPreviewWrap').classList.add('d-none');
  const imgWrap = document.getElementById('imgActualWrap');
  if (p.imagen_principal) {
    imgWrap.innerHTML = '<small class="text-muted">Imagen actual:</small><br><img src="'+<?= json_encode(UPLOADS_URL) ?>+'/products/'+p.imagen_principal+'" style="max-height:100px;border-radius:6px;margin-top:4px;">';
  } else { imgWrap.innerHTML = ''; }
  document.querySelector('#modalProductoLabel').textContent = '✏️ Editar: ' + p.nombre;
  new bootstrap.Modal(document.getElementById('modalProducto')).show();
}

function previewImg(input) {
  const wrap = document.getElementById('imgPreviewWrap');
  if (input.files && input.files[0]) {
    const reader = new FileReader();
    reader.onload = e => {
      document.getElementById('imgPreview').src = e.target.result;
      wrap.classList.remove('d-none');
    };
    reader.readAsDataURL(input.files[0]);
  }
}
</script>
