<?php

class DespesasDiversas
{
    private $db;

    public function __construct()
    {
        $this->db = new Database();
    }

    public function lerDespesasDiversas()
    {
        $this->db->query("
            SELECT dd.*, 
                   o.numero as numero_ordem, 
                   td.descricao as descricao_tipo_despesa
            FROM despesas_diversas dd
            LEFT JOIN ordens o ON dd.id_ordem = o.id_ordem
            LEFT JOIN tipos_despesas td ON dd.id_tipos_despesas = td.id_tipos_despesas
            WHERE dd.removido IS NULL
            ORDER BY dd.criado_em DESC
        ");
        return $this->db->resultados();
    }

    public function lerDespesaDiversaPorId($id)
    {
        $this->db->query("
            SELECT dd.*, 
                   o.numero as numero_ordem, 
                   td.descricao as descricao_tipo_despesa
            FROM despesas_diversas dd
            LEFT JOIN ordens o ON dd.id_ordem = o.id_ordem
            LEFT JOIN tipos_despesas td ON dd.id_tipos_despesas = td.id_tipos_despesas
            WHERE dd.id_despesas_diversas = :id AND dd.removido IS NULL
        ");
        $this->db->bind("id", $id);
        return $this->db->resultado();
    }

    public function armazenar($dados)
    {
        $this->db->query("
            INSERT INTO despesas_diversas 
                (id_ordem, descricao, quantidade, valor, id_tipos_despesas, id_usuario)
            VALUES 
                (:id_ordem, :descricao, :quantidade, :valor, :id_tipos_despesas, :id_usuario)
        ");
        foreach ($dados as $campo => $valor) {
            $this->db->bind($campo, $valor);
        }
        return $this->db->executa();
    }

    public function atualizar($dados)
    {
        $this->db->query("
            UPDATE despesas_diversas SET
                id_ordem          = :id_ordem,
                descricao         = :descricao,
                quantidade        = :quantidade,
                valor             = :valor,
                id_tipos_despesas = :id_tipos_despesas,
                alterado          = NOW()
            WHERE id_despesas_diversas = :id_despesas_diversas
        ");
        foreach ($dados as $campo => $valor) {
            $this->db->bind($campo, $valor);
        }
        return $this->db->executa();
    }

    public function remover($id)
    {
        $this->db->query("UPDATE despesas_diversas SET removido = NOW() WHERE id_despesas_diversas = :id");
        $this->db->bind("id", $id);
        return $this->db->executa();
    }

    // Utilitários para os selects
    public function lerOrdens()
    {
        $this->db->query("SELECT id_ordem, numero FROM ordens WHERE removido IS NULL ORDER BY numero DESC");
        return $this->db->resultados();
    }

    public function lerTiposDespesas()
    {
        $this->db->query("SELECT id_tipos_despesas, descricao FROM tipos_despesas WHERE removido IS NULL ORDER BY descricao");
        return $this->db->resultados();
    }
}
