<?php
    require_once "./pdocontroller.php";
    if (isset($_REQUEST['proyecto'])){$proyecto=$_REQUEST['proyecto'];}else{$proyecto="";}
	if (isset($_REQUEST['rol'])){$rol=$_REQUEST['rol'];}else{$rol="";}
	if (isset($_REQUEST['codemp'])){$codemp=$_REQUEST['codemp'];}else{$codemp="";}
    if (isset($_REQUEST['modulo'])){$modulo=$_REQUEST['modulo'];}else{$modulo="";}
    if (isset($_REQUEST['accion'])){$accion=$_REQUEST['accion'];}else{$accion="";}
    
    if (isset($_REQUEST['tipo'])){$tipo=$_REQUEST['tipo'];}else{$tipo="";}

    if (isset($_REQUEST['valor'])){$valor=$_REQUEST['valor'];}else{$valor="";}
    if (isset($_REQUEST['condicion'])){$condicion=$_REQUEST['condicion'];}else{$condicion="";}
    if (isset($_REQUEST['fuente'])){$fuente=$_REQUEST['fuente'];}else{$fuente="";}
    $query="";

    $tipoFiltro = $_GET['tipoFiltro']; // Tipo de filtro recibido del frontend
    $filtro = json_decode($_GET['filtro'], true); // Decodificar el filtro recibido
    
    $where = "";
$parametros = [];
//tener presente que los campos de fecha son diferente de tal forma que debo condicionar en el nombre del campo fecha
/*if ($tipoFiltro === "diario") {
    $where = " AND p.fchkde = :fecha";
    $parametros[':fecha'] = $filtro;
} elseif ($tipoFiltro === "semanal") {
    // Convertir la semana en un rango de fechas (suponiendo que el formato es YYYY-WW)
    $añoSemana = explode('-W', $filtro);
    $año = $añoSemana[0];
    $semana = $añoSemana[1];

    $fechaInicio = date('Y-m-d', strtotime($año . "W" . $semana . "1")); // Lunes de esa semana
    $fechaFin = date('Y-m-d', strtotime($año . "W" . $semana . "7")); // Domingo de esa semana

    $where = " AND p.fchkde BETWEEN :fechaInicio AND :fechaFin";
    $parametros[':fechaInicio'] = $fechaInicio;
    $parametros[':fechaFin'] = $fechaFin;
} elseif ($tipoFiltro === "mensual") {
    $where = " AND DATE_FORMAT(p.fchkde, '%Y-%m') = :mes";
    $parametros[':mes'] = $filtro;
} elseif ($tipoFiltro === "rango") {
    $where = " AND p.fchkde BETWEEN :fechaInicio AND :fechaFin";
    $parametros[':fechaInicio'] = $filtro['inicio'];
    $parametros[':fechaFin'] = $filtro['fin'];
}*/
// Siempre usar p.fchkde como campo de fecha para los filtros
$campoFecha = 'p.fchkde';

// Construcción del WHERE según el tipo de filtro
if ($tipoFiltro === "diario") {
    $where = " AND $campoFecha = :fecha";
    $parametros[':fecha'] = $filtro;
} elseif ($tipoFiltro === "semanal") {
    $añoSemana = explode('-W', $filtro);
    $año = $añoSemana[0];
    $semana = $añoSemana[1];

    $fechaInicio = date('Y-m-d', strtotime($año . "W" . $semana . "1")); // Lunes
    $fechaFin = date('Y-m-d', strtotime($año . "W" . $semana . "7"));   // Domingo

    $where = " AND $campoFecha BETWEEN :fechaInicio AND :fechaFin";
    $parametros[':fechaInicio'] = $fechaInicio;
    $parametros[':fechaFin'] = $fechaFin;
} elseif ($tipoFiltro === "mensual") {
    $where = " AND DATE_FORMAT($campoFecha, '%Y-%m') = :mes";
    $parametros[':mes'] = $filtro;
} elseif ($tipoFiltro === "rango") {
    $where = " AND $campoFecha BETWEEN :fechaInicio AND :fechaFin";
    $parametros[':fechaInicio'] = $filtro['inicio'];
    $parametros[':fechaFin'] = $filtro['fin'];
}

// Determinar la consulta según el tipo de datos
if ($tipo == 'ingresos') {
    $query = "SELECT p.nrocmp AS pedido, p.fchkde AS fecha, p.nomper AS cliente, GROUP_CONCAT(CONCAT(p.canart, ' x ', p.artdes) SEPARATOR ', ') AS productos,   
  SUM((p.artpvp - p.vlrdto) * p.canart) AS total, 
  
  c.efectivo, 
  c.bancolombia AS Bancolombia, 
  c.nequi AS nequi, 
  c.efectivo+c.bancolombia+c.nequi as recibido_dia,
    -- cálculo dinámico de la deuda
    (SUM((p.artpvp - p.vlrdto) * p.canart) 
   - (COALESCE(c.efectivo, 0) + COALESCE(c.bancolombia, 0) + COALESCE(c.nequi, 0))) AS deuda_hoy,
  
  c.observacion, 
  
    -- estado según la deuda
    IF(
    (SUM((p.artpvp - p.vlrdto) * p.canart) 
     - (COALESCE(c.efectivo, 0) + COALESCE(c.bancolombia, 0) + COALESCE(c.nequi, 0))) > 0,
    'pendiente',
    'pagada'
  ) AS estado,
-- subconsulta para el saldo anterior
(
    SELECT SUM(vlrqts - abnqts)
    FROM carqts q
    WHERE q.nriper = p.nriper 
      AND q.fchqts < p.fchkde
      AND q.fchpgs < p.fchkde
  ) AS saldo_anterior,

c.abonocxc AS Abono, 
  -- deuda total acumulada
  (
    (
      SUM((p.artpvp - p.vlrdto) * p.canart) 
      - (COALESCE(c.efectivo, 0) + COALESCE(c.bancolombia, 0) + COALESCE(c.nequi, 0))
    )
    + 
    COALESCE((
      SELECT SUM(vlrqts - abnqts)
      FROM carqts q
      WHERE q.nriper = p.nriper 
        AND q.fchqts < p.fchkde
        AND q.fchpgs < p.fchkde
    ), 0) - c.abonocxc
  ) AS deuda_total

FROM eatped p
LEFT JOIN eatcmp c ON p.nrocmp = c.nrocmp
WHERE p.estado != 'Eliminado' $where
GROUP BY p.nrocmp, p.fchkde, p.nomper, c.efectivo, c.bancolombia, c.nequi, c.abonocxc, c.observacion;";
} elseif ($tipo == "gastos") {
    $query = "SELECT nrocmp AS numero, nomper AS proveedor, totcmp AS valor, fchcmp AS fecha 
              FROM carcmp 
              WHERE codfte = '02' $where;";
} elseif ($tipo == "cartera") {
    $query = "SELECT nriven AS vendedor, nriper AS cliente, nrocmp AS factura, fchcmp AS fecha, 
                     vencmp AS vence, vlrcxc AS capital, vlrint AS intereses 
              FROM cxcven $where;";
}
//echo $query;

    $DBclase="PDOCONTROLLER";
    $DBconex=new $DBclase;
    $syseli="Eliminado";
    $chkinterno=0;

  /*  $query="select chkint,listasql,tabla,tabqts,sqlinit,sqledit,sqllost,tabadi,datadi,proyecto,sqlres,sqlqst,chkint,sqltmp,sqlele,chkele,sqlsearch from modcmp where nommod= :modulo ";
    $parametros=array(":modulo"=>$modulo);
    
  
	try{
        $datos=$DBconex->executeconsulta($query,$parametros);
        $parametros=[];
        foreach($datos as $qdatos){
            switch ($accion) {
                case "i":
                    $query=$qdatos["sqlinit"];
                    break;
                case "s":
                    $query=$qdatos["sqlsearch"];

                    $valor=trim($valor);
                    
                    $query = str_replace("VVV", $valor, $query);    
                    break;
                case "r":
                        $query=$qdatos["sqlres"];
                        break;
                default:
                    if($qdatos["chkele"]==1){
                        $query=$qdatos["sqlele"]." and codemp= :codemp ";
                        $parametros[":codemp"]=$codemp;
                    }else{
                        $query=$qdatos["listasql"];
                    }
                    break;
            }
            
            $chkinterno=$qdatos["chkint"];
        }
     }catch(Exception $ex){
         echo $ex->getMessage();
    }
    if($modulo=='inf_pedidos'){
    //echo $query.$DBclase;
    }
    
*/
    if($codemp!='' && $modulo!='modulo' && $rol!='empleado' && $codemp!='DND' && $chkinterno!=1){
        $DBclase="PDO".$codemp;
   
    }else{
        $DBclase="PDOCONTROLLER";
    }
    
    $DBconex=new $DBclase;

    
    //if($accion!='i'){}
    
    
    
    if($condicion!==''){
        $query=$query.$condicion;
        //echo $query.$modulo.$accion;
    }
   // echo $query;
    
    try{
       $datos=$DBconex->executeconsulta($query,$parametros);
       header("Content-Type: application/json");
       echo json_encode($datos);
       return;
       if(is_integer($datos)){
            echo "ocurrio un error";
        }else{
            if(isset($datos) && !empty($datos) && sizeof($datos)>0){
                foreach($datos as $qdatos){
                    echo $qdatos["titmod"].$qdatos["nombre"]."<br>";
                }
            }
        }
    }catch(Exception $ex){
        //echo $ex->getMessage();
        echo json_encode("ERROR ");
    }
    echo "final";     

?>