<?php

require '../conexao/conexao.php';

class ConsultaTempoProcessos
{
    private $firebirdConnection;
    private $mysqlConnection;

    public function __construct($firebirdConnection, $mysqlConnection)
    {
        $this->firebirdConnection = $firebirdConnection;
        $this->mysqlConnection = $mysqlConnection;
    }

    /**
     * Calcula o tempo total entre etapas definidas
     * 
     * @param string|null $data_inicio Data de início do filtro (opcional)
     * @param string|null $data_fim Data de fim do filtro (opcional)
     * @return array Resultado com tempo total e número de processos
     * @throws Exception Caso ocorra algum erro na consulta
     */
    public function calcularTempoTotalEtapas($data_inicio = null, $data_fim = null)
    {
        // Consulta para obter os IDs de processos definidos no MySQL
        $processos_definidos_query = "SELECT id_processo FROM define_processos WHERE 1 = 1";

        $result_processos = $this->mysqlConnection->query($processos_definidos_query);

        if (!$result_processos) {
            throw new Exception("Erro ao consultar processos (MySQL): " . $this->mysqlConnection->error);
        }

        // Coletar os IDs de processos
        $processos_definidos = [];
        while ($row = $result_processos->fetch_assoc()) {
            $processos_definidos[] = $row['id_processo'];
        }

        // Certificar-se de que há processos definidos
        if (empty($processos_definidos)) {
            throw new Exception("Nenhum processo definido encontrado.");
        }

        $processos_ids = implode(',', $processos_definidos);

        // Consulta no MySQL
        $query_tempo_processos = "
        SELECT
            processo as PROCESSO,
            codigo_processo as CODIGO_PROCESSO,
            tempo as TEMPO_SEGUNDOS,
            ultima_receita as DATA_PROCESSO
        FROM tempo_lead_time 
        WHERE CODIGO_PROCESSO IN ($processos_ids)
        AND ultima_receita BETWEEN '$data_inicio' AND '$data_fim'
        ORDER BY
            PROCESSO,
            CODIGO_PROCESSO";

        // Executar a consulta no MySQL
        $result_tempo = $this->mysqlConnection->query($query_tempo_processos);

        if (!$result_tempo) {
            throw new Exception('Erro na consulta (MySQL): ' . $this->mysqlConnection->error);
        }

        // Armazenar os resultados em um array
        $tempo_processos = [];
        while ($row = $result_tempo->fetch_assoc()) {
            $tempo_processos[] = $row;
        }

        // Retornar os resultados
        return $tempo_processos;
    }

    /**
     * Formata segundos em horas:minutos:segundos
     * 
     * @param int $segundos Número de segundos
     * @return string Tempo formatado
     */
    public function formatarTempo($segundos)
    {
        if ($segundos <= 0) {
            return '00:00:00';
        }

        $horas = floor($segundos / 3600);
        $minutos = floor(($segundos % 3600) / 60);
        $segundos_restantes = $segundos % 60;

        return sprintf('%02d:%02d:%02d', $horas, $minutos, $segundos_restantes);
    }
}

// Instanciando a classe com as conexões
$consultaTempo = new ConsultaTempoProcessos($connection, $connectionmysql);

// Exemplo de uso
// try {
//     $resultado = $consultaTempo->calcularTempoTotalEtapas('2023-01-01', '2023-12-31');
//     echo 'Tempo total (segundos): ' . $resultado['total_tempo_segundos'] . PHP_EOL;
//     echo 'Total de processos: ' . $resultado['total_processos'] . PHP_EOL;
//     echo 'Tempo total formatado: ' . $consultaTempo->formatarTempo($resultado['total_tempo_segundos']);
// } catch (Exception $e) {
//     echo 'Erro: ' . $e->getMessage();
// }
