<?php
// sistema_sessao.php
session_start();

class SistemaSessao {
    private $arquivo_sessoes = 'sessoes_ativas.json';
    
    public function __construct() {
        // Cria o arquivo se não existir
        if (!file_exists($this->arquivo_sessoes)) {
            file_put_contents($this->arquivo_sessoes, json_encode([]));
        }
    }
    
    /**
     * Verifica se o usuário já tem uma sessão ativa
     */
    public function usuarioJaLogado($username) {
        $sessoes = $this->lerSessoes();
        $current_time = time();
        
        // Remove sessões expiradas (mais de 24 horas)
        foreach ($sessoes as $key => $sessao) {
            if ($sessao['expira'] < $current_time) {
                unset($sessoes[$key]);
            }
        }
        
        // Verifica se o usuário já tem sessão ativa
        foreach ($sessoes as $sessao) {
            if ($sessao['username'] === $username && $sessao['expira'] > $current_time) {
                return true;
            }
        }
        
        $this->salvarSessoes($sessoes);
        return false;
    }
    
    /**
     * Registra uma nova sessão para o usuário
     */
    public function registrarSessao($username, $session_id = null) {
        $sessoes = $this->lerSessoes();
        $current_time = time();
        
        // Remove sessões antigas do mesmo usuário
        foreach ($sessoes as $key => $sessao) {
            if ($sessao['username'] === $username) {
                unset($sessoes[$key]);
            }
        }
        
        // Adiciona nova sessão (expira em 24 horas)
        $sessoes[] = [
            'username' => $username,
            'session_id' => $session_id ?: session_id(),
            'ip' => $_SERVER['REMOTE_ADDR'],
            'user_agent' => $_SERVER['HTTP_USER_AGENT'],
            'inicio' => $current_time,
            'expira' => $current_time + (24 * 60 * 60), // 24 horas
            'ultima_atividade' => $current_time
        ];
        
        $this->salvarSessoes($sessoes);
        return true;
    }
    
    /**
     * Renova a sessão (atualiza tempo de expiração)
     */
    public function renovarSessao($username) {
        $sessoes = $this->lerSessoes();
        $current_time = time();
        
        foreach ($sessoes as &$sessao) {
            if ($sessao['username'] === $username) {
                $sessao['ultima_atividade'] = $current_time;
                $sessao['expira'] = $current_time + (24 * 60 * 60); // Renova por mais 24 horas
                break;
            }
        }
        
        $this->salvarSessoes($sessoes);
        return true;
    }
    
    /**
     * Remove a sessão do usuário (logout)
     */
    public function removerSessao($username) {
        $sessoes = $this->lerSessoes();
        
        foreach ($sessoes as $key => $sessao) {
            if ($sessao['username'] === $username) {
                unset($sessoes[$key]);
                break;
            }
        }
        
        $this->salvarSessoes($sessoes);
        return true;
    }
    
    /**
     * Verifica se deve descontar crédito hoje (apenas uma vez por dia)
     */
    public function deveDescontarCreditoHoje($username) {
        $arquivo_creditos = 'ultimo_desconto.json';
        
        if (!file_exists($arquivo_creditos)) {
            file_put_contents($arquivo_creditos, json_encode([]));
        }
        
        $data = json_decode(file_get_contents($arquivo_creditos), true);
        $hoje = date('Y-m-d');
        
        if (isset($data[$username]) && $data[$username] === $hoje) {
            return false; // Já descontou hoje
        }
        
        // Registra que descontou hoje
        $data[$username] = $hoje;
        file_put_contents($arquivo_creditos, json_encode($data));
        
        return true; // Precisa descontar
    }
    
    /**
     * Limpa sessões expiradas
     */
    public function limparSessoesExpiresdas() {
        $sessoes = $this->lerSessoes();
        $current_time = time();
        $alterado = false;
        
        foreach ($sessoes as $key => $sessao) {
            if ($sessao['expira'] < $current_time) {
                unset($sessoes[$key]);
                $alterado = true;
            }
        }
        
        if ($alterado) {
            $this->salvarSessoes($sessoes);
        }
    }
    
    private function lerSessoes() {
        $conteudo = file_get_contents($this->arquivo_sessoes);
        return json_decode($conteudo, true) ?: [];
    }
    
    private function salvarSessoes($sessoes) {
        file_put_contents($this->arquivo_sessoes, json_encode(array_values($sessoes)));
    }
    
    /**
     * Verifica sessão ativa do usuário atual
     */
    public function verificarSessaoAtiva($username) {
        $sessoes = $this->lerSessoes();
        $current_time = time();
        
        foreach ($sessoes as $sessao) {
            if ($sessao['username'] === $username && 
                $sessao['session_id'] === session_id() && 
                $sessao['expira'] > $current_time) {
                return true;
            }
        }
        
        return false;
    }
}

// Inicializa o sistema
$sistemaSessao = new SistemaSessao();
?>