<?php
require '../../config/db.php';
require '../../app/Controllers/sessions.php';
require '../../app/Controllers/security_admin.php';
ini_set("display_errors", 0);

if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['send_form'])) {
    $data = filter_input_array(INPUT_POST, FILTER_SANITIZE_FULL_SPECIAL_CHARS);
    $dataFormatada = date('Y-m-d H:i:s', strtotime($data['expire_at']));
    $userId = !empty($data['user_id']) ? (int)$data['user_id'] : null;

    if (empty($data['code_cupom']) || empty($data['expire_at'])) {
        $_SESSION['toast_message'] = $toastMessage = 'Você precisa preencher todos os campos obrigatórios.';
        $_SESSION['toast_type'] = $toastType = 'error';
        header("Location: cupons.php");
        exit;
    } elseif (!isset($_SESSION['admin_session'])) {
        $_SESSION['toast_message'] = $toastMessage = 'Você precisa está logado como admin.';
        $_SESSION['toast_type'] = $toastType = 'error';
        header("Location: ../login.php");
        exit;
    } else {
        try {
            // Verificar se a coluna target_user_id existe, se não, adicionar
            try {
                $pdo->query("SELECT target_user_id FROM cupons LIMIT 1");
            } catch (PDOException $e) {
                // Coluna não existe, adicionar
                $pdo->exec("ALTER TABLE cupons ADD COLUMN target_user_id INT(11) NULL DEFAULT NULL AFTER type");
            }
            
            $pdo->beginTransaction();
            
            // Buscar dados do cupom (value, limit_purchase_user, limit_purchase_geral)
            $cupomData = [
                'value' => !empty($data['value']) ? (float)$data['value'] : 0.00,
                'limit_purchase_user' => !empty($data['limit_purchase_user']) ? (int)$data['limit_purchase_user'] : 1,
                'limit_purchase_geral' => !empty($data['limit_purchase_geral']) ? (int)$data['limit_purchase_geral'] : 100,
                'type' => !empty($data['type']) ? $data['type'] : 'fixed'
            ];
            
            // Insere o cupom na tabela (com target_user_id se especificado)
            $insertProduct = $pdo->prepare("INSERT INTO cupons (code, created_at, expire_at, status, value, limit_purchase_user, limit_purchase_geral, type, target_user_id) VALUES (:code, :created_at, :expire_at, :status, :value, :limit_purchase_user, :limit_purchase_geral, :type, :target_user_id)");
            $insertProduct->execute([
                ':code' => $data['code_cupom'],
                ':created_at' => date('Y-m-d H:i:s'),
                ':expire_at' => $dataFormatada,
                ':status' => 'active',
                ':value' => $cupomData['value'],
                ':limit_purchase_user' => $cupomData['limit_purchase_user'],
                ':limit_purchase_geral' => $cupomData['limit_purchase_geral'],
                ':type' => $cupomData['type'],
                ':target_user_id' => $userId ?: null
            ]);
            
            $cupomId = $pdo->lastInsertId();
            
            // Se um usuário foi selecionado, resgatar automaticamente para ele
            if ($userId) {
                $userCheck = $pdo->prepare("SELECT id, phone, balance FROM users WHERE id = ?");
                $userCheck->execute([$userId]);
                $targetUser = $userCheck->fetch(PDO::FETCH_ASSOC);
                
                if ($targetUser) {
                    // Adiciona o saldo na carteira do usuário
                    $cupomUser = $pdo->prepare("UPDATE users SET balance = balance + :balance WHERE id = :id");
                    $cupomUser->execute([
                        ':balance' => $cupomData['value'],
                        ':id' => $targetUser['id']
                    ]);

                    // Insere na tabela de cupons resgatados
                    $rescuedCupom = $pdo->prepare("INSERT INTO cupons_rescued (user_id, user_phone, value, code_cupom, date, status, cupom_id) VALUES (:user_id, :user_phone, :value, :code_cupom, :date, :status, :cupom_id)");
                    $rescuedCupom->execute([
                        ':user_id' => $targetUser['id'],
                        ':cupom_id' => $cupomId,
                        ':user_phone' => $targetUser['phone'],
                        ':value' => $cupomData['value'],
                        ':code_cupom' => $data['code_cupom'],
                        ':date' => date('Y-m-d H:i:s'),
                        ':status' => 'rescued'
                    ]);

                    // Atualiza o contador de resgates gerais
                    $stmtAcc = $pdo->prepare('UPDATE cupons SET rescueds = rescueds + 1 WHERE id = :id');
                    $stmtAcc->execute([':id' => $cupomId]);
                }
            }
            
            $pdo->commit();
            $_SESSION['toast_message'] = $toastMessage = $userId ? 'Cupom adicionado e resgatado automaticamente para o usuário selecionado!' : 'Cupom adicionado com sucesso!';
            $_SESSION['toast_type'] = $toastType = 'success';
            header("Location: cupons.php");
            exit;
        } catch (PDOException $e) {
            $pdo->rollBack();
            $_SESSION['toast_message'] = $toastMessage = 'Ocorreu um erro interno, ao adicionar o cupom. ' . $e->getMessage();
            $_SESSION['toast_type'] = $toastType = 'error';
            header("Location: cupons.php");
            exit;
        }
    }
}

if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['delete_user'])) {
    $id = filter_input(INPUT_POST, "id_product", FILTER_VALIDATE_INT);

    if (empty($id) || $id === false) {
        $_SESSION['toast_message'] = $toastMessage = 'ID do produto não encontrado.';
        $_SESSION['toast_type'] = $toastType = 'error';
        header("Location: administer_products.php");
        exit;
    } else {
        try {
            $pdo->beginTransaction();
            $deleteUser = $pdo->prepare("DELETE FROM investment_products WHERE id = :id");
            $deleteUser->execute([
            ':id' => $id
            ]);
            $pdo->commit();
            $_SESSION['toast_message'] = $toastMessage = 'Produto excluído com sucesso!';
            $_SESSION['toast_type'] = $toastType = 'success';
            header("Location: administer_products.php");
            exit;
        } catch (PDOException $e) {
            $_SESSION['toast_message'] = $toastMessage = 'Ocorreu um erro interno, ao deletar o produto. ' . $e->getMessage();
            $_SESSION['toast_type'] = $toastType = 'error';
            header("Location: administer_products.php");
            exit;
        } 
    }
    
}