<?php

class Funcao
{
    private $db;

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

    // Retorna todas as funções não removidas
    public function lerFuncoes()
    {
        $this->db->query("SELECT * FROM funcoes WHERE removido IS NULL ORDER BY descricao");
        return $this->db->resultados();
    }

    // Busca uma função/cargo por ID
    public function lerFuncaoPorId($id)
    {
        $this->db->query("SELECT * FROM funcoes WHERE id_funcao = :id_funcao AND removido IS NULL");
        $this->db->bind("id_funcao", $id);
        return $this->db->resultado();
    }

    // Insere nova função/cargo
    public function armazenar($dados)
    {
        $this->db->query("
            INSERT INTO funcoes (descricao, valor_diaria_dentro, valor_diaria_fora, criado_em, id_usuario)
            VALUES (:descricao, :valor_diaria_dentro, :valor_diaria_fora, NOW(), :id_usuario)
        ");
        $this->db->bind("descricao", $dados['descricao']);
        $this->db->bind("valor_diaria_dentro", $dados['valor_diaria_dentro']);
        $this->db->bind("valor_diaria_fora", $dados['valor_diaria_fora']);
        $this->db->bind("id_usuario", $dados['id_usuario']);
        return $this->db->executa();
    }

    public function listarTodos()
{
    $this->db->query("SELECT * FROM funcoes WHERE removido IS NULL OR removido IS NULL");
    return $this->db->resultados();
}


    // Atualiza função/cargo existente
    public function atualizar($dados)
    {
        $this->db->query("
            UPDATE funcoes SET
                descricao = :descricao,
                valor_diaria_dentro = :valor_diaria_dentro,
                valor_diaria_fora = :valor_diaria_fora,
                alterado = NOW()
            WHERE id_funcao = :id_funcao
        ");
        $this->db->bind("descricao", $dados['descricao']);
        $this->db->bind("valor_diaria_dentro", $dados['valor_diaria_dentro']);
        $this->db->bind("valor_diaria_fora", $dados['valor_diaria_fora']);
        $this->db->bind("id_funcao", $dados['id_funcao']);
        return $this->db->executa();
    }

    // Marca função como removida (soft delete)
    public function remover($id)
    {
        $this->db->query("UPDATE funcoes SET removido = NOW() WHERE id_funcao = :id_funcao");
        $this->db->bind("id_funcao", $id);
        return $this->db->executa();
    }

    // (OPCIONAL) Busca o valor da diária para a função conforme condição
    // Use esta função se sua tabela de diárias for separada
    public function valorDiariaPorCondicao($id_funcao, $id_condicao_diaria)
    {
        $this->db->query("
            SELECT valor 
            FROM diarias 
            WHERE id_cargo = :id_funcao AND condicao_diaria = :id_condicao_diaria AND removido IS NULL
            LIMIT 1
        ");
        $this->db->bind("id_funcao", $id_funcao);
        $this->db->bind("id_condicao_diaria", $id_condicao_diaria);
        $res = $this->db->resultado();
        return $res ? $res->valor : null;
    }
}
