<?php
require_once("DBManager.class.php");

class Dashboard {

public function TotalDesembolsosPorProyecto($proyecto_id)
{
    $db = new DBManager();
    $sql = "SELECT SUM(monto) AS total FROM desembolsos WHERE proyecto_id = $proyecto_id";

    $rs = $db->execute($sql);
    if ($rs->getNumOfRows() > 0) {
        $rs->firstRow();
        return !empty($rs->fields["total"]) ? $rs->fields["total"] : 0;
    }
    return 0;
}

public function TotalGastosPorProyecto($proyecto_id)
{
    $db = new DBManager();
    $sql = "SELECT SUM(g.monto) AS total
            FROM gastos g
            INNER JOIN desembolsos d ON g.iddesembolso = d.id
            WHERE d.proyecto_id = $proyecto_id";

    $rs = $db->execute($sql);
    if ($rs->getNumOfRows() > 0) {
        $rs->firstRow();
        return !empty($rs->fields["total"]) ? $rs->fields["total"] : 0;
    }
    return 0;
}

public function ResumenFinancieroProyecto($proyecto_id)
{
    $db = new DBManager();
    $sql = "SELECT 
                p.costo_total,
                (SELECT SUM(monto) FROM desembolsos WHERE proyecto_id = p.id) AS total_desembolsos,
                (SELECT SUM(g.monto)
                 FROM gastos g
                 INNER JOIN desembolsos d ON g.iddesembolso = d.id
                 WHERE d.proyecto_id = p.id) AS total_gastos
            FROM proyectos p
            WHERE p.id = $proyecto_id";

    $rs = $db->execute($sql);

    if ($rs->getNumOfRows() > 0) {
        $rs->firstRow();

        $desc  = !empty($rs->fields["total_desembolsos"]) ? $rs->fields["total_desembolsos"] : 0;
        $gasto = !empty($rs->fields["total_gastos"]) ? $rs->fields["total_gastos"] : 0;
        $costo = !empty($rs->fields["costo_total"]) ? $rs->fields["costo_total"] : 0;

        return array(
            "costo_total"        => $costo,
            "total_desembolsos"  => $desc,
            "total_gastos"       => $gasto,
            "saldo_proyecto"     => $costo - $desc,
            "saldo_desembolsos"  => $desc - $gasto
        );
    }

    return null;
}

public function GastosPorTipo($proyecto_id)
{
    $db = new DBManager();

    $sql = "SELECT tg.descripcion AS tipo, SUM(g.monto) AS total
            FROM gastos g
            INNER JOIN tipos_gasto tg ON tg.id = g.idtipogasto
            INNER JOIN desembolsos d ON g.iddesembolso = d.id
            WHERE d.proyecto_id = $proyecto_id
            GROUP BY tg.descripcion
            ORDER BY total DESC";

    $rs = $db->execute($sql);
    $vector = array();

    if ($rs->getNumOfRows() > 0) {
        $rs->firstRow();
        while (!$rs->EOF) {

            $vector[] = array(
                "tipo"  => $rs->fields["tipo"],
                "total" => $rs->fields["total"]
            );

            $rs->nextRow();
        }
    }

    return $vector;
}

public function GastosMensuales($proyecto_id)
{
    $db = new DBManager();

    $sql = "SELECT 
                DATE_FORMAT(g.fecha, '%Y-%m') AS periodo,
                SUM(g.monto) AS total
            FROM gastos g
            INNER JOIN desembolsos d ON g.iddesembolso = d.id
            WHERE d.proyecto_id = $proyecto_id
            GROUP BY DATE_FORMAT(g.fecha, '%Y-%m')
            ORDER BY periodo ASC";

    $rs = $db->execute($sql);
    $data = array();

    if ($rs->getNumOfRows() > 0) {
        $rs->firstRow();
        while (!$rs->EOF) {

            $data[] = array(
                "periodo" => $rs->fields["periodo"],
                "total"   => $rs->fields["total"]
            );

            $rs->nextRow();
        }
    }
    return $data;
}

public function UltimosGastos($proyecto_id, $limit = 10)
{
    $db = new DBManager();

    $sql = "SELECT 
                g.fecha,
                g.proveedor,
                g.concepto,
                g.monto
            FROM gastos g
            INNER JOIN desembolsos d ON g.iddesembolso = d.id
            WHERE d.proyecto_id = $proyecto_id
            ORDER BY g.fecha DESC
            LIMIT $limit";

    $rs = $db->execute($sql);
    $items = array();

    if ($rs->getNumOfRows() > 0) {
        $rs->firstRow();
        while (!$rs->EOF) {

            $items[] = array(
                "fecha"     => $rs->fields["fecha"],
                "proveedor" => $rs->fields["proveedor"],
                "concepto"  => $rs->fields["concepto"],
                "monto"     => $rs->fields["monto"]
            );

            $rs->nextRow();
        }
    }

    return $items;
}

public function ListarProyectos()
{
    $db = new DBManager();
    $sql = "SELECT id, nombre FROM proyectos ORDER BY nombre ASC";
    $rs = $db->execute($sql);
    $items = [];

    if ($rs->getNumOfRows() > 0) {
        $rs->firstRow();
        while (!$rs->EOF) {

            $items[] = [
                "id"     => $rs->fields["id"],
                "nombre" => $rs->fields["nombre"]
            ];

            $rs->nextRow();
        }
    }
    return $items;
}


}
?>
