<?php

class DiariasValores
{
    private $db;

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

    /**
     * Lista todos os valores cadastrados ordenados por cargo e tipo_destino
     */
    public function listarTodos()
    {
        $this->db->query("SELECT * FROM diarias_valores ORDER BY cargo, tipo_destino");
        return $this->db->resultados();
    }

    /**
     * Insere novo valor
     */
    public function inserir($dados)
    {
        $this->db->query("INSERT INTO diarias_valores (cargo, tipo_destino, valor) 
                          VALUES (:cargo, :tipo_destino, :valor)");
        $this->db->bind("cargo", $dados['cargo']);
        $this->db->bind("tipo_destino", $dados['tipo_destino']);
        $this->db->bind("valor", $dados['valor']);
        return $this->db->executa();
    }

    /**
     * Atualiza registro existente pelo ID
     */
    public function atualizar($id, $dados)
    {
        $this->db->query("UPDATE diarias_valores 
                          SET cargo = :cargo, tipo_destino = :tipo_destino, valor = :valor 
                          WHERE id = :id");
        $this->db->bind("id", $id);
        $this->db->bind("cargo", $dados['cargo']);
        $this->db->bind("tipo_destino", $dados['tipo_destino']);
        $this->db->bind("valor", $dados['valor']);
        return $this->db->executa();
    }

    /**
     * Remove registro pelo ID
     */
    public function remover($id)
    {
        $this->db->query("DELETE FROM diarias_valores WHERE id = :id");
        $this->db->bind("id", $id);
        return $this->db->executa();
    }

    /**
     * Busca registro pelo ID
     */
    public function buscarPorId($id)
    {
        $this->db->query("SELECT * FROM diarias_valores WHERE id = :id");
        $this->db->bind("id", $id);
        return $this->db->resultado();
    }

    /**
     * Calcula valor da diária dado cargo e tipo_destino
     * Normaliza o tipo_destino antes de buscar.
     */
   
    /**
     * Normaliza o tipo_destino para manter padronização do banco
     */
    private function normalizarTipoDestino($tipo)
    {
        $mapa = [
            'capital_estado' => 'capitais_de_estado',
            'capitais' => 'capitais_de_estado',
            'capital' => 'capitais_de_estado',
            'capitais_de_estado' => 'capitais_de_estado',

            'outras' => 'outras_cidades',
            'interior' => 'outras_cidades',
            'outras_cidades' => 'outras_cidades',

            'capitalfederal' => 'capital_federal',
            'capital_federal' => 'capital_federal',
            'brasilia' => 'capital_federal',

            'internacional' => 'viagens_internacionais',
            'viagem_internacional' => 'viagens_internacionais',
            'viagens_internacionais' => 'viagens_internacionais'
        ];

        $tipo = strtolower(trim(str_replace(' ', '_', $tipo)));
        return $mapa[$tipo] ?? $tipo;
    }

    private function normalizarCargo($cargo)
{
    $mapa = [
        'DEMOS SERVIDORES' => 'servidor',
        'Motorista' => 'motorista',
        // outros
    ];
    return $mapa[$cargo] ?? $cargo;
}

public function calcularValorDiaria($cargo, $tipoDestino, $tempo = 24, $regiao = 'outra')
{
    $cargo = $this->normalizarCargo($cargo);
    $tipoDestino = $this->normalizarTipoDestino($tipoDestino);

    $this->db->query("SELECT valor FROM diarias_valores 
                      WHERE cargo = :cargo AND tipo_destino = :destino 
                      LIMIT 1");
    $this->db->bind("cargo", $cargo);
    $this->db->bind("destino", $tipoDestino);
    $res = $this->db->resultado();

    return $res ? (float) $res->valor : 0.00;
}

public function buscarValorPorFuncaoEDestino($cargo, $tipo_destino)
{
    $this->db->query("
        SELECT valor 
        FROM diarias_valores 
        WHERE UPPER(cargo) = :cargo AND tipo_destino = :tipo_destino
        LIMIT 1
    ");
    $this->db->bind("cargo", strtoupper($cargo));
    $this->db->bind("tipo_destino", $tipo_destino);
    $resultado = $this->db->resultado();
    return $resultado ? $resultado->valor : null;
}





}
