<?php
require '../conexao/conexao.php';
require_once '../conexao/logs.php';
session_start();

$form = $_POST['form'] ?? null;
$id_pagamento = $_POST['id_pagamento'] ?? null;
$url = $_POST['url'] ?? null;

// Campos do pagamento
$tipo_solicitacao = $_POST['tipo_solicitacao'] ?? null;
$tipo_pagamento = $_POST['tipo_pagamento'] ?? null;
$filial = $_POST['filial'] ?? null;
$nome_cliente = $_POST['nome_cliente'] ?? null;
$valor = $_POST['valor'] ?? null;
$data_pagamento = $_POST['data_pagamento'] ?? null;
$numero_requisicao_cupom = $_POST['numero_requisicao_cupom'] ?? null;
$comprovante = $_FILES['comprovante']['name'] ?? null;
$comprovante_financeiro = $_FILES['comprovante_financeiro']['name'] ?? null;
$cod_fcerta = $_POST['cod_fcerta'] ?? null;
$banco = $_POST['banco_select'] ?? null;
$motivo_estorno = $_POST['motivo_estorno'] ?? null;
$numero_autorizacao = $_POST['numero_autorizacao'] ?? null;
$observacoes = $_POST['observacoes'] ?? null;
$usuario_solicitante = $_POST['usuario_solicitante'] ?? null;
$usuario_financeiro_responsavel = $_POST['usuario_financeiro_responsavel'] ?? null;
$situacao = $_POST['situacao'] ?? 'Em Análise';
$ultimos_digitos = $_POST['ultimos_digitos'] ?? null;
$identificacao_cliente = $_POST['identificacao_cliente'] ?? null;
$altera_comprovante = $_POST['altera_comprovante'] ?? null;

// Ajuste do valor
if ($valor !== null) {
    $valor = preg_replace('/\.(?=.*\.)/', '', $valor);
}

// Função para fazer upload e retornar o caminho
function uploadComprovante($file, $upload_dir) {
    if (!empty($file['name'])) {
        if (!is_dir($upload_dir)) mkdir($upload_dir, 0755, true);

        $file_tmp = $file['tmp_name'];
        $file_name = pathinfo($file['name'], PATHINFO_FILENAME);
        $file_ext = pathinfo($file['name'], PATHINFO_EXTENSION);
        $file_name = preg_replace('/[^a-zA-Z0-9_-]/', '_', $file_name);
        $new_filename = $file_name . "_" . uniqid() . "." . $file_ext;
        $file_path = $upload_dir . "/" . $new_filename;

        if (move_uploaded_file($file_tmp, $file_path)) {
            return $file_path;
        }
    }
    return null;
}

$upload_dir = "../../assets/images/uploads/pagamentos";
// Verifica se o arquivo existe antes de tentar o upload
$comprovante = null;
if (isset($_FILES['comprovante']) && $_FILES['comprovante']['error'] !== UPLOAD_ERR_NO_FILE) {
    $comprovante = uploadComprovante($_FILES['comprovante'], $upload_dir);
}

$comprovante_financeiro = null;
if (isset($_FILES['comprovante_financeiro']) && $_FILES['comprovante_financeiro']['error'] !== UPLOAD_ERR_NO_FILE) {
    $comprovante_financeiro = uploadComprovante($_FILES['comprovante_financeiro'], $upload_dir);
}
// $comprovante = uploadComprovante($_FILES['comprovante'], $upload_dir);
// $comprovante_financeiro = uploadComprovante($_FILES['comprovante_financeiro'], $upload_dir);

// INSERÇÃO OU ATUALIZAÇÃO
if ($form === 'caixa') {
    if (empty($id_pagamento) || $id_pagamento == 0) {
        // Inserção
        $stmt = $connectionmysql->prepare(
            "INSERT INTO pagamentos (
                tipo_solicitacao, tipo_pagamento, filial, data_solicitacao, nome_cliente, valor, 
                data_pagamento, numero_requisicao_cupom, comprovante, cod_fcerta, banco, 
                motivo_estorno, numero_autorizacao, observacoes, usuario_solicitante, 
                situacao, ultimos_digitos, identificacao_cliente
            ) VALUES (?, ?, ?, NOW(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
        );

        $stmt->bind_param(
            "ssssdssssssssssss",
            $tipo_solicitacao, $tipo_pagamento, $filial, $nome_cliente, $valor,
            $data_pagamento, $numero_requisicao_cupom, $comprovante, $cod_fcerta,
            $banco, $motivo_estorno, $numero_autorizacao, $observacoes, $usuario_solicitante,
            $situacao, $ultimos_digitos, $identificacao_cliente
        );

        if ($stmt->execute()) {
            $novo_id = $stmt->insert_id;

            // Registrar log de criação
            if (isset($_SESSION['CodUsuario'], $_SESSION['NomeUsuario'])) {
                $dados_depois = [
                    'tipo_solicitacao' => $tipo_solicitacao,
                    'tipo_pagamento' => $tipo_pagamento,
                    'filial' => $filial,
                    'nome_cliente' => $nome_cliente,
                    'valor' => $valor,
                    'data_pagamento' => $data_pagamento,
                    'numero_requisicao_cupom' => $numero_requisicao_cupom,
                    'comprovante' => $comprovante,
                    'cod_fcerta' => $cod_fcerta,
                    'banco' => $banco,
                    'motivo_estorno' => $motivo_estorno,
                    'numero_autorizacao' => $numero_autorizacao,
                    'observacoes' => $observacoes,
                    'usuario_solicitante' => $usuario_solicitante,
                    'situacao' => $situacao,
                    'ultimos_digitos' => $ultimos_digitos,
                    'identificacao_cliente' => $identificacao_cliente
                ];
                registrarLogCriacaoDetalhado(66, $_SESSION['CodUsuario'], $_SESSION['NomeUsuario'], json_encode($dados_depois), $novo_id);
            }
        }
    } else {
        // Atualização
        // Pegar dados antes
        $stmt_sel = $connectionmysql->prepare("SELECT * FROM pagamentos WHERE id = ?");
        $stmt_sel->bind_param("i", $id_pagamento);
        $stmt_sel->execute();
        $dados_antes = $stmt_sel->get_result()->fetch_assoc();
        $stmt_sel->close();

        if ($altera_comprovante === "Sim") {
            $comprovanteup = $comprovante ?? $dados_antes['comprovante'];
        } else {
            $comprovanteup = $dados_antes['comprovante'];
        }

        $stmt = $connectionmysql->prepare(
            "UPDATE pagamentos SET 
                tipo_solicitacao = ?, tipo_pagamento = ?, filial = ?, data_solicitacao = NOW(), nome_cliente = ?, valor = ?, 
                data_pagamento = ?, numero_requisicao_cupom = ?, comprovante = ?, cod_fcerta = ?, banco = ?,  
                motivo_estorno = ?, numero_autorizacao = ?, observacoes = ?, usuario_solicitante = ?, 
                situacao = ?, ultimos_digitos = ?, identificacao_cliente = ? 
            WHERE id = ?"
        );

        $stmt->bind_param(
            "ssssdssssssssssssi",
            $tipo_solicitacao, $tipo_pagamento, $filial, $nome_cliente, $valor,
            $data_pagamento, $numero_requisicao_cupom, $comprovanteup, $cod_fcerta,
            $banco, $motivo_estorno, $numero_autorizacao, $observacoes, $usuario_solicitante,
            $situacao, $ultimos_digitos, $identificacao_cliente, $id_pagamento
        );

        if ($stmt->execute()) {
            // Registrar log de atualização
            if (isset($_SESSION['CodUsuario'], $_SESSION['NomeUsuario'])) {
                $dados_depois = [
                    'tipo_solicitacao' => $tipo_solicitacao,
                    'tipo_pagamento' => $tipo_pagamento,
                    'filial' => $filial,
                    'nome_cliente' => $nome_cliente,
                    'valor' => $valor,
                    'data_pagamento' => $data_pagamento,
                    'numero_requisicao_cupom' => $numero_requisicao_cupom,
                    'comprovante' => $comprovanteup,
                    'cod_fcerta' => $cod_fcerta,
                    'banco' => $banco,
                    'motivo_estorno' => $motivo_estorno,
                    'numero_autorizacao' => $numero_autorizacao,
                    'observacoes' => $observacoes,
                    'usuario_solicitante' => $usuario_solicitante,
                    'situacao' => $situacao,
                    'ultimos_digitos' => $ultimos_digitos,
                    'identificacao_cliente' => $identificacao_cliente
                ];
                registrarLogAtualizacaoInteligente(66, $_SESSION['CodUsuario'], $_SESSION['NomeUsuario'], $dados_antes, $dados_depois, $id_pagamento);
            }

            // Excluir arquivo antigo se atualizado
            if ($altera_comprovante === "Sim" && !empty($dados_antes['comprovante']) && file_exists($dados_antes['comprovante'])) {
                unlink($dados_antes['comprovante']);
            }
        }
    }
}

// REDIRECIONAMENTO
// Só tenta fechar se $stmt foi criado e é um objeto válido
if (isset($stmt) && $stmt instanceof mysqli_stmt) {
    $stmt->close();
}

if (isset($connectionmysql)) {
    $connectionmysql->close();
}

header("Location: ./index.php?status=sucesso&" . $url);
exit();
// $stmt->close();
// $connectionmysql->close();
// header("Location: ./index.php?status=sucesso&" . $url);
// exit();
