<?php
/**
 * API para Registrar Token FCM dos Gestores
 */

require_once __DIR__ . '/../../config/bootstrap.php';

use ControleFrotas\Config\Database;
use ControleFrotas\Utils\Response;
use ControleFrotas\Utils\Logger;

header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Authorization');

// Tratar OPTIONS (CORS preflight)
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(200);
    exit();
}

// Verificar autenticação
$user = requireAuth();

try {
    // Verificar se é POST
    if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
        throw new Exception('Método não permitido');
    }
    
    // Obter dados do JSON
    $input = json_decode(file_get_contents('php://input'), true);
    
    if (!$input) {
        throw new Exception('Dados JSON inválidos');
    }
    
    // Validar campos obrigatórios
    $required_fields = ['token', 'user_type', 'device_id'];
    foreach ($required_fields as $field) {
        if (!isset($input[$field]) || empty($input[$field])) {
            throw new Exception("Campo obrigatório não informado: $field");
        }
    }
    
    $token = $input['token'];
    $userType = $input['user_type'];
    $deviceId = $input['device_id'];
    $deviceName = $input['device_name'] ?? 'Android Device';
    $appVersion = $input['app_version'] ?? '1.0.0';
    $platform = $input['platform'] ?? 'android';
    
    // Validar tipo de usuário
    if (!in_array($userType, ['gestor', 'motorista'])) {
        throw new Exception('Tipo de usuário inválido');
    }
    
    // Verificar se já existe um registro para este dispositivo
    $sql_check = "SELECT id FROM fcm_tokens WHERE device_id = ? AND user_type = ?";
    $stmt_check = $pdo->prepare($sql_check);
    $stmt_check->execute([$deviceId, $userType]);
    $existing = $stmt_check->fetch();
    
    if ($existing) {
        // Atualizar token existente
        $sql_update = "UPDATE fcm_tokens SET 
                      fcm_token = ?, 
                      device_name = ?, 
                      app_version = ?, 
                      platform = ?, 
                      updated_at = NOW() 
                      WHERE device_id = ? AND user_type = ?";
        
        $stmt_update = $pdo->prepare($sql_update);
        $success = $stmt_update->execute([
            $token, 
            $deviceName, 
            $appVersion, 
            $platform, 
            $deviceId, 
            $userType
        ]);
        
        if ($success) {
            echo json_encode([
                'success' => true,
                'message' => 'Token FCM atualizado com sucesso',
                'action' => 'updated'
            ]);
        } else {
            throw new Exception('Erro ao atualizar token FCM');
        }
    } else {
        // Inserir novo token
        $sql_insert = "INSERT INTO fcm_tokens 
                       (fcm_token, user_type, device_id, device_name, app_version, platform, created_at, updated_at) 
                       VALUES (?, ?, ?, ?, ?, ?, NOW(), NOW())";
        
        $stmt_insert = $pdo->prepare($sql_insert);
        $success = $stmt_insert->execute([
            $token, 
            $userType, 
            $deviceId, 
            $deviceName, 
            $appVersion, 
            $platform
        ]);
        
        if ($success) {
            echo json_encode([
                'success' => true,
                'message' => 'Token FCM registrado com sucesso',
                'action' => 'created'
            ]);
        } else {
            throw new Exception('Erro ao registrar token FCM');
        }
    }
    
} catch (Exception $e) {
    http_response_code(400);
    echo json_encode([
        'success' => false,
        'message' => $e->getMessage()
    ]);
}
?> 
