from flask import Blueprint, render_template_string, request, redirect, url_for, session, flash
from werkzeug.utils import secure_filename
import sqlite3
import os
from database import DB_NAME, UPLOAD_FOLDER

auth_bp = Blueprint('auth', __name__)

LOGIN_HTML = """
<!DOCTYPE html>
<html lang="id">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Login - Sistem MBG B3 IPeKB</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
    <style>
        body { background-color: #f4f6f9; height: 100vh; display: flex; align-items: center; justify-content: center; }
        .login-card { max-width: 400px; width: 100%; padding: 30px; border-radius: 10px; box-shadow: 0 4px 15px rgba(0,0,0,0.1); background: #fff; border-top: 5px solid #0b3d91; }
        .logo-container { text-align: center; margin-bottom: 20px; }
        .btn-primary-custom { background-color: #0b3d91; border: none; width: 100%; font-weight: bold; padding: 10px; }
        .btn-primary-custom:hover { background-color: #082c68; }
    </style>
</head>
<body>
    <div class="login-card">
        <div class="logo-container">
            <h4 class="fw-bold" style="color: #0b3d91;">SISTEM MBG B3</h4>
            <p class="text-muted mb-0" style="font-size: 14px;">Log in untuk mengakses panel Anda</p>
        </div>
        {% with messages = get_flashed_messages(with_categories=true) %}
            {% if messages %}
                {% for category, message in messages %}
                    <div class="alert alert-{{ 'success' if category == 'success' else 'danger' }} py-2" style="font-size: 14px;">{{ message }}</div>
                {% endfor %}
            {% endif %}
        {% endwith %}
        <form action="/login" method="POST">
            <div class="mb-3">
                <label class="form-label" style="font-size: 14px; font-weight: 600;">Username</label>
                <div class="input-group">
                    <span class="input-group-text"><i class="fas fa-user"></i></span>
                    <input type="text" name="username" class="form-control" required placeholder="Masukkan username...">
                </div>
            </div>
            <div class="mb-4">
                <label class="form-label" style="font-size: 14px; font-weight: 600;">Password</label>
                <div class="input-group">
                    <span class="input-group-text"><i class="fas fa-lock"></i></span>
                    <input type="password" name="password" class="form-control" required placeholder="Masukkan sandi...">
                </div>
            </div>
            <button type="submit" class="btn btn-primary btn-primary-custom text-white">MASUK KE SISTEM</button>
        </form>
        <div class="text-center mt-3"><small class="text-muted">&copy; 2026 IPeKB Kabupaten Sukabumi</small></div>
    </div>
</body>
</html>
"""

@auth_bp.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        
        conn = sqlite3.connect(DB_NAME)
        c = conn.cursor()
        
        # Ekstrak kolom kecamatan (indeks 5 dari hasil query ini)
        c.execute("SELECT id, username, role, nama_lengkap, foto_profil, kecamatan FROM users WHERE username=? AND password=?", (username, password))
        user = c.fetchone()
        conn.close()
        
        if user:
            session['logged_in'] = True # DITAMBAHKAN AGAR SELARAS DENGAN CEK SESSION DI DAPUR.PY
            session['user_id'] = user[0]
            session['username'] = user[1]
            session['role'] = user[2]
            session['nama_lengkap'] = user[3]
            session['foto_profil'] = user[4]
            session['kecamatan'] = user[5] if user[5] else 'SEMUA' # Inject Wilayah ke Session
            
            if session['role'] == 'superadmin':
                return redirect(url_for('superadmin.admin_dashboard'))
            return redirect(url_for('main.dashboard'))
        else:
            flash('Username atau password salah!', 'error')
            return redirect(url_for('auth.login'))
            
    return render_template_string(LOGIN_HTML)

@auth_bp.route('/logout')
def logout():
    session.clear()
    flash('Anda telah berhasil keluar dari sistem.', 'success')
    return redirect(url_for('auth.login'))

@auth_bp.route('/ubah_profil', methods=['POST'])
def ubah_profil():
    if 'username' not in session:
        return redirect(url_for('auth.login'))
        
    user_id = session['user_id']
    password_baru = request.form.get('password_baru')
    foto_profil = request.files.get('foto_profil')
    
    conn = sqlite3.connect(DB_NAME)
    c = conn.cursor()
    
    if password_baru:
        c.execute("UPDATE users SET password=? WHERE id=?", (password_baru, user_id))
        
    if foto_profil and foto_profil.filename != '':
        filename = secure_filename(f"user_{user_id}_{foto_profil.filename}")
        filepath = os.path.join(UPLOAD_FOLDER, filename)
        foto_profil.save(filepath)
        c.execute("UPDATE users SET foto_profil=? WHERE id=?", (filename, user_id))
        session['foto_profil'] = filename
        
    conn.commit()
    conn.close()
    
    flash('Profil berhasil diperbarui!', 'success')
    return redirect(request.referrer or url_for('main.dashboard'))