<?php
// auth_middleware.php

require_once __DIR__ . '/vendor/autoload.php';
$env = require '/home/akgbilis/fi_sf/.env.php';

use Firebase\JWT\JWT;
use Firebase\JWT\Key;

header('Content-Type: application/json');

// ✅ Uygulama içi erişim kontrolü (X-App-Auth)
$headers = array_change_key_case(getallheaders(), CASE_LOWER);
$appAuthKey = $env['app_auth_key'] ?? '';

if (!isset($headers['x-app-auth']) || $headers['x-app-auth'] !== $appAuthKey) {
    http_response_code(403);
    echo json_encode(['success' => false, 'message' => 'İzin yok dostum']);
    exit;
}

// 🔐 Tüm header varyasyonlarını yakala
function getAuthorizationHeader() {
    if (isset($_SERVER['Authorization'])) return trim($_SERVER["Authorization"]);
    if (isset($_SERVER['HTTP_AUTHORIZATION'])) return trim($_SERVER["HTTP_AUTHORIZATION"]);
    if (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION'])) return trim($_SERVER["REDIRECT_HTTP_AUTHORIZATION"]);
    if (function_exists('apache_request_headers')) {
        $headers = apache_request_headers();
        foreach ($headers as $key => $value) {
            if (strtolower($key) === 'authorization') {
                return trim($value);
            }
        }
    }
    return null;
}

$authHeader = getAuthorizationHeader();

// ✅ Debug: Header geldi mi?
file_put_contents("debug_auth_only.txt", "AuthHeader: " . ($authHeader ?? 'YOK') . "\n");

// ❌ Bearer formatı yoksa
if (!$authHeader || !preg_match('/Bearer\s(\S+)/', $authHeader, $matches)) {
    http_response_code(401);
    echo json_encode(['error' => 'Token bulunamadı']);
    exit;
}

$token = $matches[1];

// ❌ Token kısaysa
if (strlen($token) < 10) {
    http_response_code(401);
    echo json_encode(['error' => 'Token çok kısa veya eksik']);
    exit;
}

// ✅ Token doğrula
try {
    $decoded = JWT::decode($token, new Key($env['jwt_secret'], 'HS256'));

    // 👇 Token başarılı decode edildi, kullanıcı bilgilerini al
    $user_id = $decoded->sub ?? null;
    $user_email = $decoded->email ?? null;

    if (!$user_id) {
        throw new Exception("Token'dan kullanıcı ID'si alınamadı");
    }

    // ✅ Log
    file_put_contents("debug_decoded.txt", print_r($decoded, true));

} catch (Exception $e) {
    file_put_contents("debug_jwt_error.txt", $e->getMessage());
    http_response_code(401);
    echo json_encode(['error' => 'Geçersiz veya süresi dolmuş token']);
    exit;
}