<?php
/**
 * Exemplos de uso da classe Cookie v2.0
 */

// Estenda a classe e defina o nome do cookie
class SessionCookie extends Cookie {
    public string $name = 'minha_sessao';
    public int    $ttl  = 3600 * 24 * 30; // 30 dias
}

$cookie = new SessionCookie();


// =============================================================================
// has() — Verifica se uma chave existe
// =============================================================================

if ($cookie->has('user_id')) {
    echo "Usuário já identificado.\n";
} else {
    echo "Nenhum usuário no cookie.\n";
}


// =============================================================================
// add() — Adiciona ou atualiza um valor
// =============================================================================

$cookie->add('user_id', 42);
$cookie->add('theme', 'dark');
$cookie->add('lang', 'pt-BR');


// =============================================================================
// get() — Lê um valor com fallback opcional
// =============================================================================

$user_id = $cookie->get('user_id');           // 42
$theme   = $cookie->get('theme', 'light');    // 'dark'
$missing = $cookie->get('nao_existe', 'N/A'); // 'N/A'

echo "Usuário : {$user_id}\n";
echo "Tema    : {$theme}\n";
echo "Ausente : {$missing}\n";


// =============================================================================
// all() — Retorna todos os dados
// =============================================================================

$dados = $cookie->all();

foreach ($dados as $key => $value) {
    echo "{$key}: {$value}\n";
}

// user_id: 42
// theme: dark
// lang: pt-BR


// =============================================================================
// del() — Remove uma chave específica
// =============================================================================

$cookie->del('lang');

echo $cookie->has('lang') ? "ainda existe\n" : "removido\n"; // removido


// =============================================================================
// logout() — Apaga todos os dados e remove o cookie do browser
// =============================================================================

$cookie->logout();

echo count($cookie->all()) === 0 ? "Cookie limpo.\n" : "Ainda tem dados.\n";


// =============================================================================
// Personalizando as opções de segurança
// (por exemplo, em ambiente local sem HTTPS)
// =============================================================================

class DevCookie extends Cookie {
    public string $name    = 'dev_session';
    public array  $options = [
        'path'     => '/',
        'secure'   => false,  // HTTP permitido em ambiente local
        'httponly' => true,
        'samesite' => 'Lax',
    ];
}

$dev = new DevCookie();
$dev->add('debug', true);


// =============================================================================
// Tratando o erro de headers já enviados
// =============================================================================

try {
    $cookie->add('chave', 'valor');
} catch (RuntimeException $e) {
    error_log($e->getMessage());
    // "Não é possível definir o cookie 'minha_sessao' — headers já enviados em index.php:10"
}