<?php
/**
 * Impersonate - Acessar como Loja
 * Permite ao Super Admin fazer login automatico como dono de uma loja
 * Sem precisar de credenciais - acesso direto ao dashboard
 */
require_once __DIR__ . '/../../../includes/config.php';

$pdo = getDB();

// Acao: encerrar impersonacao - VERIFICA ANTES do isSuperAdmin()
// Porque durante impersonacao o usuario NAO é superadmin
if (isset($_GET['action']) && $_GET['action'] === 'stop') {
    if (isset($_SESSION['superadmin_original'])) {
        $original = $_SESSION['superadmin_original'];

        // Limpar TODAS as variaveis de sessao do usuario
        $keysToUnset = [
            'user_id', 'user_name', 'user_email', 'user_role',
            'store_id', 'store_name', 'store_slug', 'store_subdomain',
            'business_type', 'is_impersonating', 'superadmin_original'
        ];
        foreach ($keysToUnset as $key) {
            unset($_SESSION[$key]);
        }

        // Restaurar dados do superadmin
        $_SESSION['superadmin_id'] = $original['superadmin_id'];
        $_SESSION['super_admin_id'] = $original['superadmin_id']; // ambas chaves
        $_SESSION['superadmin_email'] = $original['superadmin_email'];
        $_SESSION['superadmin_name'] = $original['superadmin_name'];
        $_SESSION['is_super_admin'] = true;

        $_SESSION['flash_success'] = 'Voce voltou para sua conta de administrador';
        
        header('Location: /pages/superadmin/stores/index.php');
        exit;
    } else {
        // Nao tem sessao de impersonacao, redireciona para login
        $_SESSION['flash_error'] = 'Sessao de impersonacao nao encontrada';
        header('Location: /pages/login.php');
        exit;
    }
}

// A partir daqui, verifica se é superadmin
if (!isSuperAdmin()) {
    header('Location: /pages/login.php');
    exit;
}

$storeId = $_GET['store_id'] ?? null;

if (empty($storeId)) {
    $_SESSION['flash_error'] = 'ID da loja nao informado';
    header('Location: index.php');
    exit;
}

// Buscar loja com todos os dados
$stmt = $pdo->prepare("SELECT * FROM stores WHERE id = ? AND deleted_at IS NULL");
$stmt->execute([$storeId]);
$store = $stmt->fetch(PDO::FETCH_ASSOC);

if (!$store) {
    $_SESSION['flash_error'] = 'Loja nao encontrada';
    header('Location: index.php');
    exit;
}

// Buscar usuario owner da loja
$stmt = $pdo->prepare("SELECT * FROM users WHERE store_id = ? AND role = 'owner' LIMIT 1");
$stmt->execute([$storeId]);
$owner = $stmt->fetch(PDO::FETCH_ASSOC);

// Se nao tem owner, buscar qualquer usuario da loja
if (!$owner) {
    $stmt = $pdo->prepare("SELECT * FROM users WHERE store_id = ? ORDER BY id ASC LIMIT 1");
    $stmt->execute([$storeId]);
    $owner = $stmt->fetch(PDO::FETCH_ASSOC);
}

// Se ainda nao tem usuario, criar dados fake para sessao
if (!$owner) {
    $owner = [
        'id' => 0,
        'name' => 'Admin - ' . $store['name'],
        'email' => 'admin@' . ($store['subdomain'] ?? 'loja') . '.duolead.com.br',
        'role' => 'owner'
    ];
}

// Salvar sessao original do superadmin para poder voltar
$_SESSION['superadmin_original'] = [
    'superadmin_id' => $_SESSION['superadmin_id'] ?? $_SESSION['super_admin_id'] ?? null,
    'superadmin_email' => $_SESSION['superadmin_email'] ?? null,
    'superadmin_name' => $_SESSION['superadmin_name'] ?? null,
    'is_super_admin' => $_SESSION['is_super_admin'] ?? null,
    'return_url' => '/pages/superadmin/stores/index.php'
];

// Limpar variaveis do superadmin antes de criar sessao do usuario
unset($_SESSION['is_super_admin']);
unset($_SESSION['super_admin_id']);
unset($_SESSION['superadmin_id']);
unset($_SESSION['superadmin_email']);
unset($_SESSION['superadmin_name']);

// Criar sessao COMPLETA como se fosse login normal do usuario
$_SESSION['user_id'] = $owner['id'];
$_SESSION['user_name'] = $owner['name'];
$_SESSION['user_email'] = $owner['email'];
$_SESSION['user_role'] = $owner['role'] ?? 'owner';

// Dados da loja - igual ao login normal
$_SESSION['store_id'] = $store['id'];
$_SESSION['store_name'] = $store['name'];
$_SESSION['store_slug'] = $store['slug'] ?? $store['subdomain'] ?? null;
$_SESSION['store_subdomain'] = $store['subdomain'] ?? null;
$_SESSION['business_type'] = $store['business_type'] ?? 'service';

// Marcar como impersonacao para mostrar banner
$_SESSION['is_impersonating'] = true;

// Registrar log
error_log("[IMPERSONATION] Super Admin acessou loja ID: {$storeId} ({$store['name']}) como usuario: {$owner['name']}");

// Redirecionar para o dashboard da loja
$redirectUrl = '/pages/minha-loja.php';

header('Location: ' . $redirectUrl);
exit;
