<?php

if (file_exists('../conexao/conexao.php')) {
    include('../conexao/conexao.php');
}

class Filiais
{
    private $mysqlConnection;

    // Construtor que recebe a conexão e a armazena em uma propriedade
    public function __construct($mysqlConnection)
    {
        $this->mysqlConnection = $mysqlConnection;
    }

    public function listarFiliais($id = '', $sql = '')
    {
        // Consulta SQL padrão para buscar todas as filiais
        $sql = "SELECT codigo_fc AS id, nome_filial AS nome_filial, id_cidade AS id_cidade , situacao, codigo_fc FROM filiais WHERE 1=1 $sql";

        // Armazena os parâmetros e seus tipos para o bind
        $params = [];
        $types = '';

        // Condicional para verificar se os parâmetros foram passados e construir a query e os parâmetros adequados
        if (!empty($id)) {
            $sql .= " AND filiais.id = ?";
            $params[] = $id;
            $types .= 'i';  // Tipo 'i' para integer
        }

        // Prepara a consulta
        $stmt = $this->mysqlConnection->prepare($sql);
        if (!$stmt) {
            die('Erro na preparação da consulta MySQL: ' . $this->mysqlConnection->error);
        }

        // Se houver parâmetros, fazemos o bind deles
        if (!empty($params)) {
            $stmt->bind_param($types, ...$params);
        }

        // Executa a consulta
        if (!$stmt->execute()) {
            die('Erro na execução da consulta MySQL: ' . $stmt->error);
        }

        // Obtém o resultado
        $result = $stmt->get_result();
        if (!$result) {
            die('Erro ao obter resultado MySQL: ' . $stmt->error);
        }

        $tiposFiliais = [];
        while ($row = $result->fetch_assoc()) {
            $tiposFiliais[] = $row;
        }

        // Fecha a consulta
        $stmt->close();

        return $tiposFiliais;
    }

    public function addNovaFilial()
    {
        require_once '../../conexao/logs.php';

        if ($_SERVER['REQUEST_METHOD'] === 'POST') {

            if (isset($_POST['nome_filial'], $_POST['id_cidade'], $_POST['situacao'], $_POST['codigo_fc'])) {

                $nome_filial = $_POST['nome_filial'];
                $id_cidade = $_POST['id_cidade'];
                $situacao = $_POST['situacao'];
                $codigo_fc = $_POST['codigo_fc'];

                $query = "INSERT INTO filiais (nome_filial, id_cidade, situacao, codigo_fc) VALUES (?, ?, ?, ?)";
                $stmt = $this->mysqlConnection->prepare($query);

                if (!$stmt) {
                    die('Erro na preparação da consulta MySQL: ' . $this->mysqlConnection->error);
                }

                $stmt->bind_param("siss", $nome_filial, $id_cidade, $situacao, $codigo_fc);

                if ($stmt->execute()) {

                    // Pega o ID da nova filial
                    $next_id = $this->mysqlConnection->insert_id;

                    // Registra o log de criação
                    if (isset($_SESSION['CodUsuario'], $_SESSION['NomeUsuario'])) {
                        $dados_depois = [
                            'nome_filial' => $nome_filial,
                            'id_cidade'   => $id_cidade,
                            'situacao'    => $situacao,
                            'codigo_fc'   => $codigo_fc
                        ];

                        registrarLogCriacaoDetalhado(
                            77,
                            $_SESSION['CodUsuario'],
                            $_SESSION['NomeUsuario'],
                            json_encode($dados_depois),
                            $next_id
                        );
                    }

                    $_SESSION['message'] = 'Filial adicionada com sucesso!';
                } else {
                    $_SESSION['message'] = 'Erro ao adicionar filial: ' . $stmt->error;
                }

                $stmt->close();
            } else {
                $_SESSION['message'] = 'Os campos Nome Filial, Cidade, Situação e Código FC são obrigatórios.';
            }

            header('Location: index.php');
            exit();
        }
    }


    public function updateFilial()
    {
        require_once '../../conexao/logs.php';

        if ($_SERVER['REQUEST_METHOD'] === 'POST') {

            if (isset($_POST['id_filial'], $_POST['nome_filial'], $_POST['id_cidade'], $_POST['situacao'], $_POST['codigo_fc'])) {

                $id_filial = $_POST['id_filial'];
                $nome_filial = $_POST['nome_filial'];
                $id_cidade = $_POST['id_cidade'];
                $situacao = $_POST['situacao'];
                $codigo_fc = $_POST['codigo_fc'];

                // Recupera os dados antes da atualização para o log
                $stmt_select = $this->mysqlConnection->prepare("SELECT nome_filial, id_cidade, situacao, codigo_fc FROM filiais WHERE id = ?");
                $stmt_select->bind_param("i", $id_filial);
                $stmt_select->execute();
                $result = $stmt_select->get_result();
                $dados_antes = $result->fetch_assoc();
                $stmt_select->close();

                $query = "UPDATE filiais SET nome_filial = ?, id_cidade = ?, situacao = ?, codigo_fc = ? WHERE id = ?";
                $stmt = $this->mysqlConnection->prepare($query);

                if (!$stmt) {
                    die('Erro na preparação da consulta MySQL: ' . $this->mysqlConnection->error);
                }

                $stmt->bind_param("sissi", $nome_filial, $id_cidade, $situacao, $codigo_fc, $id_filial);

                if ($stmt->execute()) {

                    // 🔹 Registrar log de atualização
                    if (isset($_SESSION['CodUsuario'], $_SESSION['NomeUsuario'])) {
                        $dados_depois = [
                            'nome_filial' => $nome_filial,
                            'id_cidade'   => $id_cidade,
                            'situacao'    => $situacao,
                            'codigo_fc'   => $codigo_fc
                        ];

                        registrarLogAtualizacaoInteligente(
                            76,
                            $_SESSION['CodUsuario'],
                            $_SESSION['NomeUsuario'],
                            $dados_antes,
                            $dados_depois,
                            $id_filial
                        );
                    }

                    $_SESSION['message'] = 'Filial atualizada com sucesso!';
                } else {
                    $_SESSION['message'] = 'Erro ao atualizar filial: ' . $stmt->error;
                }

                $stmt->close();
            } else {
                $_SESSION['message'] = 'Os campos ID Filial, Nome Filial, Cidade, Situação e Código FC são obrigatórios.';
            }

            header('Location: index.php');
            exit();
        }
    }


    public function deletaFiliais($mysqlConnection)
    {

        require_once '../../conexao/logs.php';

        // Verifica se o ID foi enviado via GET
        if (isset($_GET['id'])) {

            // Escapa o valor do GET
            $id_filial = $mysqlConnection->real_escape_string($_GET['id']);

            // Prepara a consulta SQL de exclusão
            $query = "DELETE FROM filiais WHERE id = ?";

            // Prepara a declaração
            $stmt = $mysqlConnection->prepare($query);
            if (!$stmt) {
                die('Erro na preparação da consulta MySQL: ' . $mysqlConnection->error);
            }

            // Vincula o parâmetro
            $stmt->bind_param("i", $id_filial);

            // Executa a consulta
            if ($stmt->execute()) {

                // 🔹 Pega o ID da nova meta
                $next_id = $mysqlConnection->insert_id;

                // 🔹 Registra o log somente aqui
                if (isset($_SESSION['CodUsuario'], $_SESSION['NomeUsuario'])) {
                    $dados_antes = [
                        'id_filial'   => $id_filial
                    ];

                    registrarLogExclusaoDetalhado(
                        71,
                        $_SESSION['CodUsuario'],
                        $_SESSION['NomeUsuario'],
                        json_encode($dados_antes),
                        $next_id
                    );
                }

                // Mensagem de sucesso
                echo "<script>alert('Meta removida com sucesso!');</script>";

                // Redireciona para recarregar a página sem o parâmetro de ID
                echo "<script>window.location.href = window.location.pathname;</script>";
            } else {
                echo "Erro ao remover meta: " . $stmt->error;
            }

            // Fecha a declaração
            $stmt->close();
        }
    }
}
