<?php
// Modelo para gestión de movimientos de inventario
require_once "../config/Conexion.php";

class InventarioMovimientos
{
    public function __construct()
    {
    }

    // Listar movimientos
    public function listar()
    {
        $sql = "SELECT m.idmovimiento, m.tipo_movimiento, m.numero_documento, m.fecha_movimiento,
                m.total, m.estado, m.observaciones,
                pr.razon_social as proveedor,
                CONCAT(p.nombre, ' ', p.apaterno) as usuario
                FROM inv_movimientos m
                LEFT JOIN inv_proveedores pr ON m.idproveedor = pr.idproveedor
                LEFT JOIN persona p ON m.idusuario = p.idpersona
                ORDER BY m.fecha_movimiento DESC
                LIMIT 100";
        return ejecutarConsulta($sql);
    }

    // Insertar movimiento
    public function insertar($tipo_movimiento, $numero_documento, $idproveedor, $idusuario, $idatencion, $total, $observaciones)
    {
        $sql = "INSERT INTO inv_movimientos (tipo_movimiento, numero_documento, idproveedor, idusuario, idatencion, total, observaciones, estado)
                VALUES ('$tipo_movimiento', '$numero_documento', " .
            ($idproveedor ? "'$idproveedor'" : "NULL") . ", '$idusuario', " .
            ($idatencion ? "'$idatencion'" : "NULL") . ", '$total', '$observaciones', 'COMPLETADO')";
        return ejecutarConsulta_retornarID($sql);
    }

    // Insertar detalle de movimiento
    public function insertarDetalle($idmovimiento, $idproducto, $cantidad, $precio_unitario, $lote, $fecha_vencimiento, $observaciones)
    {
        $subtotal = $cantidad * $precio_unitario;
        $sql = "INSERT INTO inv_detalle_movimientos (idmovimiento, idproducto, cantidad, precio_unitario, subtotal, lote, fecha_vencimiento, observaciones)
                VALUES ('$idmovimiento', '$idproducto', '$cantidad', '$precio_unitario', '$subtotal', '$lote', " .
            ($fecha_vencimiento ? "'$fecha_vencimiento'" : "NULL") . ", '$observaciones')";
        return ejecutarConsulta($sql);
    }

    // Mostrar movimiento
    public function mostrar($idmovimiento)
    {
        $sql = "SELECT m.*, pr.razon_social as proveedor, CONCAT(p.nombre, ' ', p.apaterno) as usuario
                FROM inv_movimientos m
                LEFT JOIN inv_proveedores pr ON m.idproveedor = pr.idproveedor
                LEFT JOIN persona p ON m.idusuario = p.idpersona
                WHERE m.idmovimiento = '$idmovimiento'";
        return ejecutarConsultaSimpleFila($sql);
    }

    // Listar detalle de movimiento
    public function listarDetalle($idmovimiento)
    {
        $sql = "SELECT d.*, p.codigo, p.nombre as producto, p.unidad_medida
                FROM inv_detalle_movimientos d
                INNER JOIN inv_productos p ON d.idproducto = p.idproducto
                WHERE d.idmovimiento = '$idmovimiento'";
        return ejecutarConsulta($sql);
    }

    // Anular movimiento
    public function anular($idmovimiento)
    {
        $sql = "UPDATE inv_movimientos SET estado = 'ANULADO' WHERE idmovimiento = '$idmovimiento'";
        return ejecutarConsulta($sql);
    }

    // Obtener último número de documento
    public function obtenerUltimoNumero($tipo_movimiento)
    {
        $prefijo = substr($tipo_movimiento, 0, 3);
        $sql = "SELECT MAX(CAST(SUBSTRING(numero_documento, 5) AS UNSIGNED)) as ultimo
                FROM inv_movimientos
                WHERE tipo_movimiento = '$tipo_movimiento'
                AND numero_documento LIKE '$prefijo-%'";
        $result = ejecutarConsultaSimpleFila($sql);
        $ultimo = $result['ultimo'] ? $result['ultimo'] : 0;
        $nuevo = $ultimo + 1;
        return $prefijo . '-' . str_pad($nuevo, 6, '0', STR_PAD_LEFT);
    }
}
?>