<?php
require_once(dirname(__DIR__, 2) . '/init.php');

// CSRF token kontrolü
if (!isset($_POST['csrf_token']) || !csrf_token($_POST['csrf_token'])[0]) {
    echo json_encode(['status' => 'error', 'message' => lang('security.csrf_invalid', [], 'Güvenlik tokeni geçersiz')]);
    exit;
}

$action = m_a_p('action');

switch ($action) {
    case 'login':
        $email = m_a_p('email');
        $password = m_a_p('password');
        
        // Input validation
        if (empty($email) || empty($password)) {
            echo json_encode(['status' => 'error', 'message' => lang('auth.required_credentials', [], 'Email ve şifre gereklidir')]);
            exit;
        }
        
        if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            echo json_encode(['status' => 'error', 'message' => lang('auth.email_invalid', [], 'Geçerli bir email adresi giriniz')]);
            exit;
        }
        
        // Kullanıcıyı bul
        $admin = $db->table('admins')->where('email', '=', $email)->get();
        
        if (empty($admin['data'])) {
            echo json_encode(['status' => 'error', 'message' => lang('auth.invalid_credentials', [], 'Email adresi veya şifre yanlış')]);
            exit;
        }
        
        $admin_data = $admin['data'][0];
        $stored_password = $admin_data['password'];
        
        // Şifre kontrolü (eski MD5 ve yeni güvenli sistem)
        $password_valid = false;
        
        // Önce yeni güvenli sistem ile kontrol et
        if (strlen($stored_password) > 32) {
            // Yeni sistem (hash daha uzun)
            $password_valid = m_verify_password($password, $stored_password);
            
            // Eğer rehash gerekiyorsa güncelle
            if ($password_valid && m_password_needs_rehash($stored_password)) {
                $new_hash = m_password_secure($password);
                $db->table('admins')->where('id', '=', $admin_data['id'])->update(['password' => $new_hash]);
            }
        } else {
            // Eski MD5 sistem ile kontrol et
            $password_valid = (m_password($password) === $stored_password);
            
            // Eğer eski sistem ile giriş başarılıysa, yeni sisteme geçir
            if ($password_valid) {
                $new_hash = m_password_secure($password);
                $db->table('admins')->where('id', '=', $admin_data['id'])->update(['password' => $new_hash]);
            }
        }
        
        if (!$password_valid) {
            echo json_encode(['status' => 'error', 'message' => lang('auth.invalid_credentials', [], 'Email adresi veya şifre yanlış')]);
            exit;
        }
        
        // Başarılı giriş
        $login_data = [
            'last_login' => $db->now(),
            'last_ip' => m_ip(),
            'login_count' => ($admin_data['login_count'] ?? 0) + 1
        ];
        
        $db->table('admins')->where('id', '=', $admin_data['id'])->update($login_data);
        
        // Session oluştur
        m_set_session('m_admin', $admin_data['id']);
        m_set_session('admin_email', $admin_data['email']);
        m_set_session('admin_name', $admin_data['name'] ?? '');
        m_set_session('login_time', time());
        
        // Login log kaydet
        $log_data = [
            'admin_id' => $admin_data['id'],
            'ip_address' => m_ip(),
            'user_agent' => $_SERVER['HTTP_USER_AGENT'] ?? '',
            'login_time' => $db->now(),
            'status' => 'success'
        ];
        
        // Log tablosu varsa kaydet
        try {
            $db->table('admin_login_logs')->insert($log_data);
        } catch (Exception $e) {
            // Log tablosu yoksa sessizce geç
        }
        
        echo json_encode(['status' => 'success', 'message' => lang('auth.login_success', [], 'Giriş başarılı'), 'redirect' => ADMIN_URL]);
        break;
        
    case 'logout':
        // Session temizle
        m_delete_session('m_admin');
        m_delete_session('admin_email');
        m_delete_session('admin_name');
        m_delete_session('login_time');
        
        echo json_encode(['status' => 'success', 'message' => lang('auth.logout_success', [], 'Çıkış yapıldı'), 'redirect' => ADMIN_URL . '/login']);
        break;
        
    case 'check_session':
        if (m_admin_check()) {
            echo json_encode(['status' => 'success', 'logged_in' => true]);
        } else {
            echo json_encode(['status' => 'error', 'logged_in' => false]);
        }
        break;
        
    default:
        echo json_encode(['status' => 'error', 'message' => lang('error.invalid_action', [], 'Geçersiz işlem')]);
        break;
}
?>