<?php 
session_start();
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

$host = 'localhost';
$database = 'C:\Program Files (x86)\Common Files\Aspel\Sistemas Aspel\SAE9.00\Ejemplos\EJEMPLOS.FDB';
$username = 'SYSDBA';
$password = 'masterkey';
setlocale(LC_MONETARY, 'es_MX');

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    try {
        // Conexión a la base de datos Firebird
        $dbh = new PDO("firebird:host=$host;dbname=$database;charset=UTF8", $username, $password);

        // Iniciar la transacción
        $dbh->beginTransaction();

        // Consulta para obtener las claves actuales
        $sql = "SELECT CLAVE FROM PROV01";
        $stmt = $dbh->query($sql);
        $claves = $stmt->fetchAll(PDO::FETCH_COLUMN);

        // Filtrar las claves numéricas y generar nueva clave
        $numeric_claves = array_filter($claves, 'is_numeric');
        $last_clave = max($numeric_claves); 
        $new_clave_number = ($last_clave !== null ? intval($last_clave) : 0) + 1; 
        $new_clave = sprintf('%10d', $new_clave_number);

        // Captura datos del formulario
        $manejo_credito = $_POST['manejo_credito'] ?? 'N';

        // Obtener campos libres
        $query_campos_libres = "SELECT CAMPO FROM PARAM_CAMPOSLIBRES01 WHERE IDTABLA = 'PROV_CLIB'";
        $stmt_campos = $dbh->prepare($query_campos_libres);
        $stmt_campos->execute();
        $campos_libres = [];
        while ($row = $stmt_campos->fetch(PDO::FETCH_ASSOC)) {
            $campo = $row['CAMPO'];
            $campos_libres[$campo] = $_POST['campo_libre_' . htmlspecialchars($campo)] ?? null;
        }
        

        // Consulta de inserción
        $sql = "INSERT INTO PROV01 (
                    CLAVE, STATUS, NOMBRE, RFC, REG_FISC, CURP, CALLE, NUMEXT, NUMINT, CRUZAMIENTOS, CRUZAMIENTOS2, COLONIA, LOCALIDAD, MUNICIPIO, NACIONALIDAD, 
                    CVE_PAIS, CODIGO, ESTADO, CLASIFIC, CVE_ZONA, TELEFONO, FAX, PAG_WEB, CON_CREDITO, FORMA_PAGO, BENEFICIARIO,
                    TITULAR_CUENTA, SUCURSAL_BANCO, CUENTA_BANCO, CLABE, BANCO, DESC_OTROS, DIASCRED, LIMCRED, VENTAS, DESCUENTO, ULT_PAGOF, ULT_PAGOD, 
                    ULT_PAGOM, ULT_COMPF, ULT_COMPD, ULT_COMPM, SALDO, CUENTA_CONTABLE, EMAILPRED, TIP_TERCERO, TIP_OPERA
                ) VALUES (
                    :clave, 'A', :nombre, :rfc, :regimen, :curp, :calle, :num_ext, :num_int, :entre_calle, :y_calle, :colonia, :localidad, :municipio, :nacionalidad, 
                    :cve_pais, :codigopostal, :estado, :clasificacion, :zona, :telefono, :fax, :pagina_web,:manejo_credito, :forma_pago, :beneficiario,
                    :titular, :sucursal, :cuenta, :clabe, :banco, :observaciones, 0, 0.0, :ventas_anuales, 0, :fecha_ultimo_pago, :docto_ultimo_pago, 
                    :monto_ultimo_pago, :fecha_ultima_venta, :docto_ultima_venta, :monto_ultima_venta, 0.0, :cuenta_contable, :email, :tipo_tercero, :tipo_operacion
                )";

        $stmt = $dbh->prepare($sql);
        $stmt->bindParam(':clave', $new_clave);
        $stmt->bindParam(':nombre', $_POST['nombre']);
        $stmt->bindParam(':rfc', $_POST['rfc']);
        $stmt->bindParam(':regimen', $_POST['regimen']);
        $stmt->bindParam(':curp', $_POST['curp']);
        $stmt->bindParam(':calle', $_POST['calle']);
        $stmt->bindParam(':num_ext', $_POST['num_ext']);
        $stmt->bindParam(':num_int', $_POST['num_int']);
        $stmt->bindParam(':entre_calle', $_POST['entre_calle']);
        $stmt->bindParam(':y_calle', $_POST['y_calle']);
        $stmt->bindParam(':colonia', $_POST['colonia']);
        $stmt->bindParam(':localidad', $_POST['localidad']);
        $stmt->bindParam(':municipio', $_POST['municipio']);
        $stmt->bindParam(':nacionalidad', $_POST['nacionalidad']);
        $stmt->bindParam(':cve_pais', $_POST['cve_pais']);
        $stmt->bindParam(':codigopostal', $_POST['codigopostal']);
        $stmt->bindParam(':estado', $_POST['estado']);
        $stmt->bindParam(':clasificacion', $_POST['clasificacion']);
        $stmt->bindParam(':zona', $_POST['zona']);
        $stmt->bindParam(':telefono', $_POST['telefono']);
        $stmt->bindParam(':fax', $_POST['fax']);
        $stmt->bindParam(':pagina_web', $_POST['pagina_web']);
        $stmt->bindParam(':manejo_credito', $manejo_credito);
        $stmt->bindParam(':forma_pago', $_POST['forma_pago']);
        $stmt->bindParam(':beneficiario', $_POST['beneficiario']);
        $stmt->bindParam(':titular', $_POST['titular']);
        $stmt->bindParam(':sucursal', $_POST['sucursal']);
        $stmt->bindParam(':cuenta', $_POST['cuenta']);
        $stmt->bindParam(':clabe', $_POST['clabe']);
        $stmt->bindParam(':banco', $_POST['banco']);
        $stmt->bindParam(':observaciones', $_POST['observaciones']);
        $stmt->bindParam(':ventas_anuales', $_POST['ventas_anuales']);
        $stmt->bindParam(':fecha_ultimo_pago', $_POST['fecha_ultimo_pago']);
        $stmt->bindParam(':docto_ultimo_pago', $_POST['docto_ultimo_pago']);
        $stmt->bindParam(':monto_ultimo_pago', $_POST['monto_ultimo_pago']);
        $stmt->bindParam(':fecha_ultima_venta', $_POST['fecha_ultima_venta']);
        $stmt->bindParam(':docto_ultima_venta', $_POST['docto_ultima_venta']);
        $stmt->bindParam(':monto_ultima_venta', $_POST['monto_ultima_venta']);
        $stmt->bindParam(':cuenta_contable', $_POST['cuenta_contable']);
        $stmt->bindParam(':email', $_POST['email']);
        $stmt->bindParam(':tipo_tercero', $_POST['tipo_tercero']);
        $stmt->bindParam(':tipo_operacion', $_POST['tipo_operacion']);

        $stmt->execute();


        
        // Insertar campos libres en PROV_CLIB01
        if (!empty($campos_libres)) {
            $campos_nombres = implode(", ", array_keys($campos_libres));
            $campos_placeholders = implode(", ", array_map(fn($c) => ":$c", array_keys($campos_libres)));
            $sql_clib = "INSERT INTO PROV_CLIB01 (CVE_PROV, $campos_nombres) VALUES (:clave, $campos_placeholders)";
            $stmt_clib = $dbh->prepare($sql_clib);
            $stmt_clib->bindValue(':clave', $new_clave);
            foreach ($campos_libres as $campo => $valor) {
                $stmt_clib->bindValue(":$campo", $valor);
            }
            $stmt_clib->execute();
        }

        // Confirmar la transacción
        $dbh->commit();
        echo json_encode(["status" => "success", "message" => "Proveedor y campos libres insertados correctamente."]);
    } catch (PDOException $e) {
        $dbh->rollBack();
        echo json_encode(["status" => "error", "message" => "Error de base de datos: " . $e->getMessage()]);
    }
}
?>