<?php
if (!isset($conn)) require_once __DIR__.'/../../config/auth.php';

function asegurar_tablas_finanzas(mysqli $conn): void
{
    $conn->query("CREATE TABLE IF NOT EXISTS ingresos_egresos (
      id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
      codigo VARCHAR(30) NOT NULL UNIQUE,
      fecha DATE NOT NULL,
      tercero_tipo ENUM('Cliente','Proveedor') NOT NULL,
      cliente_id INT UNSIGNED NULL,
      proveedor_id INT UNSIGNED NULL,
      descripcion VARCHAR(255) NOT NULL,
      naturaleza ENUM('A Cobrar','A Pagar') NOT NULL,
      monto DECIMAL(15,2) NOT NULL,
      fecha_vencimiento DATE NOT NULL,
      creado_en DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
      INDEX idx_ie_fecha(fecha), INDEX idx_ie_vencimiento(fecha_vencimiento),
      CONSTRAINT fk_ie_cliente FOREIGN KEY(cliente_id) REFERENCES clientes(id) ON DELETE RESTRICT,
      CONSTRAINT fk_ie_proveedor FOREIGN KEY(proveedor_id) REFERENCES proveedores(id) ON DELETE RESTRICT
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");
    $conn->query("CREATE TABLE IF NOT EXISTS caja_movimientos (
      id INT AUTO_INCREMENT PRIMARY KEY,
      codigo VARCHAR(30) NOT NULL UNIQUE,
      fecha DATE NOT NULL,
      origen ENUM('Ingreso/Egreso','Cuenta') NOT NULL,
      ingreso_egreso_id INT UNSIGNED NULL,
      concepto_cuenta VARCHAR(150) NULL,
      cuenta_bancaria_id INT NOT NULL,
      tipo ENUM('Ingreso','Egreso') NOT NULL,
      descripcion VARCHAR(255) NOT NULL,
      monto DECIMAL(15,2) NOT NULL,
      usuario_id INT NULL,
      creado_en DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
      INDEX idx_caja_fecha(fecha), INDEX idx_caja_ie(ingreso_egreso_id),
      CONSTRAINT fk_caja_ie FOREIGN KEY(ingreso_egreso_id) REFERENCES ingresos_egresos(id) ON DELETE RESTRICT,
      CONSTRAINT fk_caja_banco FOREIGN KEY(cuenta_bancaria_id) REFERENCES cuentas_bancarias(id) ON DELETE RESTRICT
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");
}

function monto_formulario($valor): float
{
    return abs((float)str_replace(['.', ','], ['', '.'], (string)$valor));
}

function nuevo_codigo(mysqli $conn, string $tabla, string $prefijo): string
{
    $fila=$conn->query("SELECT COALESCE(MAX(id),0)+1 siguiente FROM $tabla")->fetch_assoc();
    return $prefijo.'-'.date('Ym').'-'.str_pad((string)$fila['siguiente'],6,'0',STR_PAD_LEFT);
}

function opciones_terceros(mysqli $conn): array
{
    $salida=[];
    $r=$conn->query("SELECT id,codigo,nombre FROM clientes WHERE estado='Activo' ORDER BY nombre");
    while($x=$r->fetch_assoc()) $salida[]=['valor'=>'Cliente:'.$x['id'],'texto'=>'Cliente · '.$x['codigo'].' · '.$x['nombre']];
    $r=$conn->query("SELECT id,codigo,nombre FROM proveedores WHERE estado='Activo' ORDER BY nombre");
    while($x=$r->fetch_assoc()) $salida[]=['valor'=>'Proveedor:'.$x['id'],'texto'=>'Proveedor · '.$x['codigo'].' · '.$x['nombre']];
    return $salida;
}

asegurar_tablas_finanzas($conn);
