<?php
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');

// OPTIONS isteği için
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(200);
    exit();
}

require_once '../config/config.php';

// Sadece POST isteklerini kabul et
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    jsonResponse(['error' => 'Sadece POST istekleri kabul edilir'], 405);
}

// JSON verilerini al
$input = json_decode(file_get_contents('php://input'), true);

if (!$input) {
    jsonResponse(['error' => 'Geçersiz JSON verisi'], 400);
}

$action = $input['action'] ?? '';

switch ($action) {
    case 'login':
        handleLogin($input);
        break;
    
    case 'verify_token':
        handleVerifyToken($input);
        break;
    
    case 'logout':
        handleLogout($input);
        break;
    
    default:
        jsonResponse(['error' => 'Geçersiz işlem'], 400);
}

function handleLogin($input) {
    $username = sanitizeInput($input['username'] ?? '');
    $password = $input['password'] ?? '';
    
    if (empty($username) || empty($password)) {
        jsonResponse(['error' => 'Kullanıcı adı ve şifre gereklidir'], 400);
    }
    
    try {
        $db = new Database();
        $stmt = $db->query(
            "SELECT id, username, password, email, full_name, role, status FROM users WHERE username = ? AND status = 'active'",
            [$username]
        );
        
        $user = $stmt->fetch();
        
        if ($user && verifyPassword($password, $user['password'])) {
            // Oturum token'ı oluştur
            $sessionToken = generateToken();
            $expiresAt = date('Y-m-d H:i:s', time() + SESSION_TIMEOUT);
            
            // Token'ı veritabanına kaydet
            $db->query(
                "INSERT INTO user_sessions (user_id, session_token, expires_at) VALUES (?, ?, ?)",
                [$user['id'], $sessionToken, $expiresAt]
            );
            
            // Başarılı giriş
            jsonResponse([
                'success' => true,
                'message' => 'Giriş başarılı',
                'user' => [
                    'id' => $user['id'],
                    'username' => $user['username'],
                    'email' => $user['email'],
                    'full_name' => $user['full_name'],
                    'role' => $user['role']
                ],
                'token' => $sessionToken,
                'expires_at' => $expiresAt
            ]);
        } else {
            jsonResponse(['error' => 'Geçersiz kullanıcı adı veya şifre'], 401);
        }
    } catch (Exception $e) {
        error_log("Mobile login error: " . $e->getMessage());
        jsonResponse(['error' => 'Giriş işlemi sırasında bir hata oluştu'], 500);
    }
}

function handleVerifyToken($input) {
    $token = $input['token'] ?? '';
    
    if (empty($token)) {
        jsonResponse(['error' => 'Token gereklidir'], 400);
    }
    
    try {
        $db = new Database();
        $stmt = $db->query(
            "SELECT us.*, u.id, u.username, u.email, u.full_name, u.role, u.status 
             FROM user_sessions us 
             JOIN users u ON us.user_id = u.id 
             WHERE us.session_token = ? AND us.expires_at > NOW() AND u.status = 'active'",
            [$token]
        );
        
        $session = $stmt->fetch();
        
        if ($session) {
            // Token geçerli, kullanıcı bilgilerini döndür
            jsonResponse([
                'success' => true,
                'valid' => true,
                'user' => [
                    'id' => $session['id'],
                    'username' => $session['username'],
                    'email' => $session['email'],
                    'full_name' => $session['full_name'],
                    'role' => $session['role']
                ],
                'expires_at' => $session['expires_at']
            ]);
        } else {
            jsonResponse([
                'success' => true,
                'valid' => false,
                'message' => 'Token geçersiz veya süresi dolmuş'
            ]);
        }
    } catch (Exception $e) {
        error_log("Token verification error: " . $e->getMessage());
        jsonResponse(['error' => 'Token doğrulama sırasında bir hata oluştu'], 500);
    }
}

function handleLogout($input) {
    $token = $input['token'] ?? '';
    
    if (empty($token)) {
        jsonResponse(['error' => 'Token gereklidir'], 400);
    }
    
    try {
        $db = new Database();
        $db->query("DELETE FROM user_sessions WHERE session_token = ?", [$token]);
        
        jsonResponse([
            'success' => true,
            'message' => 'Çıkış başarılı'
        ]);
    } catch (Exception $e) {
        error_log("Mobile logout error: " . $e->getMessage());
        jsonResponse(['error' => 'Çıkış işlemi sırasında bir hata oluştu'], 500);
    }
}
?>
