<?php
// Desactivar impresión de errores para no ensuciar el JSON
error_reporting(0);
ini_set('display_errors', 0);

header('Content-Type: application/json');

ob_start();

try {
    require_once("conecta.php");

    // 1. Recepción y validación de datos
    $nombre        = isset($_POST['nombre']) ? trim($_POST['nombre']) : '';
    $prefijo       = isset($_POST['prefijo']) ? trim($_POST['prefijo']) : '';
    $sufijo        = isset($_POST['sufijo']) ? trim($_POST['sufijo']) : '';
    
    $idcategoria    = !empty($_POST['idcategoria']) ? intval($_POST['idcategoria']) : null;
    $idsubcategoria = !empty($_POST['idsubcategoria']) ? intval($_POST['idsubcategoria']) : null;
    $idproveedor    = !empty($_POST['idproveedor']) ? intval($_POST['idproveedor']) : null;
    
    $costo          = isset($_POST['costo']) ? floatval($_POST['costo']) : 0;
    $precio         = isset($_POST['precio']) ? floatval($_POST['precio']) : 0;
    $stock          = isset($_POST['stock']) ? floatval($_POST['stock']) : 0;
    
    $fecha_carga    = !empty($_POST['fecha_carga']) ? $_POST['fecha_carga'] : date('Y-m-d');
    $observacion    = isset($_POST['observacion']) ? $_POST['observacion'] : '';

    if (empty($nombre) || $precio <= 0) {
        throw new Exception("El nombre y el precio son obligatorios.");
    }

    // 2. Inserción usando Sentencias Preparadas (Seguridad contra Inyección SQL)
    $sql = "INSERT INTO articulo (nombre, idcategoria, idsubcategoria, idproveedor, costo, precio, stock, fecha_carga, observacion) 
            VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
    
    $stmt = $conecta->prepare($sql);
    
    // 's' = string, 'i' = integer, 'd' = double/float
    $stmt->bind_param("siiiiddss", $nombre, $idcategoria, $idsubcategoria, $idproveedor, $costo, $precio, $stock, $fecha_carga, $observacion);

    if (!$stmt->execute()) {
        throw new Exception("Error al insertar: " . $stmt->error);
    }

    $ultimoId = $stmt->insert_id;
    $stmt->close();
    
    // 3. Generación y actualización del código
    $codigoGenerado = $prefijo . $ultimoId . $sufijo;
    
    $sqlActualiza = "UPDATE articulo SET codigo = ? WHERE idarticulo = ?";
    $stmtUpdate = $conecta->prepare($sqlActualiza);
    $stmtUpdate->bind_param("si", $codigoGenerado, $ultimoId);
    
    if (!$stmtUpdate->execute()) {
        throw new Exception("Error al actualizar el código: " . $stmtUpdate->error);
    }
    $stmtUpdate->close();

    $respuesta = array(
        "ok" => true, 
        "message" => "Artículo guardado con código: $codigoGenerado",
        "data" => array(
            "id" => $ultimoId,
            "codigo" => $codigoGenerado,
            "nombre" => $nombre,
            "precio" => $precio,
            "stock" => $stock
        )
    );

} catch (Exception $e) {
    $respuesta = array(
        "ok" => false, 
        "message" => $e->getMessage()
    );
}

ob_clean();
echo json_encode($respuesta);
exit;