<?php
session_start();
require_once 'conexao.php';

// Habilitar exibição de erros para debug (remover em produção)
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Log para verificar se o script está sendo chamado
error_log("Script alterar_status_origem.php chamado em: " . date('Y-m-d H:i:s'));

// Verificar se o usuário está logado
if (!isset($_SESSION['logado']) || $_SESSION['logado'] !== true) {
    error_log("Usuário não logado");
    header('HTTP/1.1 401 Unauthorized');
    echo json_encode(['success' => false, 'message' => 'Não autorizado']);
    exit;
}

// Verificar se os dados foram recebidos via POST
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    error_log("Método não permitido: " . $_SERVER['REQUEST_METHOD']);
    header('HTTP/1.1 405 Method Not Allowed');
    echo json_encode(['success' => false, 'message' => 'Método não permitido']);
    exit;
}

// Log dos dados recebidos
error_log("Dados POST recebidos: " . print_r($_POST, true));

// Verificar CSRF token
if (!isset($_POST['csrf_token']) || empty($_POST['csrf_token'])) {
    error_log("Token CSRF não fornecido");
    header('HTTP/1.1 403 Forbidden');
    echo json_encode(['success' => false, 'message' => 'Token CSRF não fornecido']);
    exit;
}

if (!isset($_SESSION['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
    error_log("Token CSRF inválido. Sessão: " . ($_SESSION['csrf_token'] ?? 'não definido') . ", POST: " . $_POST['csrf_token']);
    header('HTTP/1.1 403 Forbidden');
    echo json_encode(['success' => false, 'message' => 'Token de segurança inválido']);
    exit;
}

// Ler os dados do POST
$id = isset($_POST['id']) ? trim($_POST['id']) : null;
$ativo = isset($_POST['ativo']) ? trim($_POST['ativo']) : null;
$tenant_id = isset($_SESSION['tenant_id']) ? $_SESSION['tenant_id'] : null;

// Log dos dados processados
error_log("Dados processados - ID: '$id', Ativo: '$ativo', Tenant: '$tenant_id'");

// Validar dados
if ($id === null || $id === '' || !is_numeric($id)) {
    error_log("ID inválido: " . $id);
    echo json_encode(['success' => false, 'message' => 'ID da origem inválido: ' . $id]);
    exit;
}

$id = intval($id);
if ($id <= 0) {
    error_log("ID menor ou igual a zero: " . $id);
    echo json_encode(['success' => false, 'message' => 'ID da origem inválido: ' . $id]);
    exit;
}

if ($ativo === null || $ativo === '' || !is_numeric($ativo)) {
    error_log("Status inválido: " . $ativo);
    echo json_encode(['success' => false, 'message' => 'Status inválido: ' . $ativo]);
    exit;
}

$ativo = intval($ativo);
if ($ativo !== 0 && $ativo !== 1) {
    error_log("Status fora do range: " . $ativo);
    echo json_encode(['success' => false, 'message' => 'Status inválido: ' . $ativo]);
    exit;
}

if ($tenant_id === null || !is_numeric($tenant_id)) {
    error_log("Tenant ID inválido: " . $tenant_id);
    echo json_encode(['success' => false, 'message' => 'Tenant inválido: ' . $tenant_id]);
    exit;
}

$tenant_id = intval($tenant_id);
if ($tenant_id <= 0) {
    error_log("Tenant ID menor ou igual a zero: " . $tenant_id);
    echo json_encode(['success' => false, 'message' => 'Tenant inválido: ' . $tenant_id]);
    exit;
}

try {
    // Verificar se a origem pertence ao tenant
    $stmt = $conn->prepare("SELECT id, nome FROM origens WHERE id = ? AND tenant_id = ?");
    $stmt->bind_param("ii", $id, $tenant_id);
    $stmt->execute();
    $result = $stmt->get_result();
    
    if ($result->num_rows === 0) {
        error_log("Origem não encontrada - ID: $id, Tenant: $tenant_id");
        echo json_encode(['success' => false, 'message' => 'Origem não encontrada ou não pertence ao tenant']);
        exit;
    }
    
    $origem = $result->fetch_assoc();
    $nome_origem = $origem['nome'];
    
    error_log("Origem encontrada: " . $nome_origem . " (ID: " . $id . ")");
    
    // Atualizar o status da origem
    $stmt = $conn->prepare("UPDATE origens SET ativo = ? WHERE id = ? AND tenant_id = ?");
    $stmt->bind_param("iii", $ativo, $id, $tenant_id);
    
    if ($stmt->execute()) {
        error_log("Origem atualizada com sucesso - ID: $id, Novo status: $ativo");
        
        // Registrar log da ação
        $acao = $ativo ? 'Ativação de Origem' : 'Inativação de Origem';
        registrarLog($acao, "Origem: $nome_origem (ID: $id)");
        
        echo json_encode([
            'success' => true, 
            'message' => 'Status da origem atualizado com sucesso'
        ]);
    } else {
        error_log("Erro ao executar query: " . $stmt->error);
        echo json_encode([
            'success' => false, 
            'message' => 'Erro ao atualizar status no banco de dados: ' . $stmt->error
        ]);
    }
} catch (Exception $e) {
    error_log("Exceção ao alterar status da origem: " . $e->getMessage());
    echo json_encode([
        'success' => false, 
        'message' => 'Erro interno do servidor: ' . $e->getMessage()
    ]);
}

// Função para registrar log
function registrarLog($acao, $detalhes = '') {
    $arquivoLog = 'logs/origem_acoes.log';
    $dataHora = date('Y-m-d H:i:s');
    $usuario = $_SESSION['usuario_id'] ?? 'Sistema';
    $ip = $_SERVER['REMOTE_ADDR'] ?? 'IP desconhecido';
    $mensagem = "[$dataHora] [Usuário: $usuario] [IP: $ip] [Ação: $acao] $detalhes\n";

    if (!file_exists('logs')) {
        mkdir('logs', 0755, true);
    }
    file_put_contents($arquivoLog, $mensagem, FILE_APPEND | LOCK_EX);
}
?>