<?php
require_once(dirname(__DIR__) . '/init.php');
if(m_admin_check()){
    m_redirect(ADMIN_URL);
}
?>
<!DOCTYPE html>
<html>
<head>
    <title><?=PROJECT?> | <?= lang('title', [], 'Yönetim Paneli') ?></title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta content="VebuSoft Yönetim Paneli" name="description" />
    <meta content="VebuSoft" name="author" />
    <!-- App favicon -->
    <link rel="shortcut icon" href="<?=ADMIN_THEME_URL?>/assets/images/vebuicon.svg">
    <link rel="stylesheet"  href="<?=ADMIN_THEME_URL?>/assets/css/login.css">
    <link rel="stylesheet"  href="<?=ADMIN_THEME_URL?>/assets/css/bootstrap.min.css">

    <!-- Layout config Js -->
    <!-- Bootstrap Css -->
    <!-- Icons Css -->

    <link href="<?=ADMIN_THEME_URL?>/assets/css/app.min.css" rel="stylesheet" type="text/css">

<div class="wrapper">
    <img class="login_logo" src="<?=ADMIN_THEME_URL?>/assets/images/vebusoft-logo-beyaz.svg" >
    <div class="login-box">
        <?php
        if($_POST)
        {
            // IP rate limiting kontrolü
            $ip_limit = m_check_ip_rate_limit('login', 5, 300, 900); // 5 deneme, 5 dakika, 15 dakika blok
            if (!$ip_limit['allowed']) {
                m_set_session('formSuccess', false);
                m_set_session('error_message', $ip_limit['message']);
                m_log_security_event('ip_rate_limit_exceeded', [
                    'email' => $_POST['email'] ?? '',
                    'action' => 'login',
                    'attempts' => $ip_limit['attempts'] ?? 0
                ]);
            } else {
                // Güvenli veri alma
                $email = $_POST['email'] ?? '';
                $password = $_POST['password'] ?? '';
            
            // Kullanıcıyı bul
            $admin = $db->table('admins')->where('email','=',$email)->get();
            
            if (empty($admin['data'])) {
                m_set_session('formSuccess', false);
                m_set_session('error_message', lang('auth.invalid_credentials', [], 'Email adresi veya şifre yanlış!'));
            } else {
                $admin_data = $admin['data'][0];
                $stored_password = $admin_data['password'];
                $password_valid = false;
                
                // Şifre kontrolü (eski MD5 ve yeni güvenli sistem)
                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) {
                    // Başarısız giriş
                    m_set_session('formSuccess', false);
                    m_set_session('error_message', lang('auth.invalid_credentials', [], 'Email adresi veya şifre yanlış!'));
                    
                    // Güvenlik logu
                    m_log_security_event('failed_login', [
                        'email' => $email,
                        'ip' => m_get_client_ip()
                    ]);
                    
                    // Hesap kilitleme kontrolü
                    $lockout = m_check_account_lockout($email);
                    if ($lockout['locked']) {
                        m_set_session('error_message', $lockout['message']);
                    } else {
                        // 3 başarısız deneme sonrası hesabı kilitle
                        $failed_attempts = ($ip_limit['attempts'] ?? 0);
                        if ($failed_attempts >= 3) {
                            m_lock_account($email, 30);
                            m_set_session('error_message', lang('auth.locked_temporary', [], 'Hesabınız geçici olarak kilitlendi. 30 dakika sonra tekrar deneyin.'));
                        }
                    }
                } else {
                    // Başarılı giriş
                    $login_data = [
                        'last_login' => $db->now(),
                        'last_ip' => m_ip()
                    ];
                    $db->table('admins')->where('id','=',$admin_data['id'])->update($login_data);
                    
                    // Güvenli session başlat
                    m_secure_session_start();
                    
                    // Session değişkenlerini ayarla
                    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('admin_lastname', $admin_data['lastname'] ?? '');
                    m_set_session('last_activity', time());
                    m_set_session('user_agent', $_SERVER['HTTP_USER_AGENT'] ?? '');
                    m_set_session('login_ip', m_get_client_ip());
                    
                    // Session ID'yi yenile
                    session_regenerate_id(true);
                    
                    // IP rate limit sıfırla
                    m_reset_ip_rate_limit('login');
                    
                    // Hesap kilidini kaldır
                    m_unlock_account($email);
                    
                    // Başarılı giriş logu
                    m_log_security_event('successful_login', [
                        'email' => $email,
                        'admin_id' => $admin_data['id']
                    ]);
                    
                    m_redirect($_SERVER['HTTP_REFERER']);
                }
            }
        }
        }

        ?>
        <form method ="POST">

            <h2><?=lang('login_welcome', [], 'Hoş Geldiniz')?> </h2>

            <div class="input-box">
        <span class="icon">
          <ion-icon name="mail"></ion-icon>
        </span>
                <input type="text" name="email" required>
                <label><?=lang('login_email_adress', [], 'Email Adresi')?></label>
            </div>

            <div class="input-box">
        <span class="icon">
          <ion-icon name="lock-closed"></ion-icon>
        </span>
                <input type="password" name="password" required>
                <label><?=lang('login_password', [], 'Şifre')?></label>
            </div>

            <div class="remember-forgot">
                <label><input type="checkbox"> <?=lang('login_remember_me', [], 'Beni Hatırla')?></label>
                <a href="#"><?=lang('login_password_forget', [], 'Şifremi Unuttum')?></a>
            </div>

            <button type="submit"><?=lang('login_login', [], 'Giriş')?></button>


        </form >

    </div>

</div>


    <script src="<?=ADMIN_THEME_URL?>/assets/js/plugins.js"></script>


<?php if (isset($_SESSION['formSuccess'])): ?>
    <script>
        document.addEventListener('DOMContentLoaded', function () {

            <?php if ($_SESSION['formSuccess']): ?>
            Toastify({
                text: '<?php echo $_SESSION['success_message']; ?>',
                duration: 3000,
                gravity: 'bottom',
                position: 'right',
                close: true,
                backgroundColor: 'linear-gradient(to right, #00b09b, #96c93d)',
            }).showToast();
            <?php else: ?>
            Toastify({
                text: '<?php echo $_SESSION['error_message']; ?>',
                duration: 3000,
                gravity: 'bottom',
                position: 'right',
                backgroundColor: 'linear-gradient(to right, #ff416c, #ff4b2b)',
            }).showToast();
            <?php endif; ?>
        });
    </script>
    <?php
    unset($_SESSION['formSuccess']);
    unset($_SESSION['succes_message']);
    unset($_SESSION['error_message']);
endif; ?>