from flask import Blueprint, session, redirect, render_template, request, flash, current_app
import sqlite3
import os
from werkzeug.utils import secure_filename
from database import DB_NAME

main_bp = Blueprint('main', __name__)

@main_bp.route('/')
def dashboard():
    if not session.get('logged_in'):
        return redirect('/login')
        
    role = session.get('role')
    
    # Mengarahkan aktor masing-masing ke HTML mandirinya
    if role == 'superadmin':
        # Mengambil data statistik untuk dashboard superadmin
        conn = sqlite3.connect(DB_NAME)
        c = conn.cursor()
        
        c.execute("SELECT COUNT(*) FROM users")
        total_users = c.fetchone()[0]
        
        # Pengecekan try-except untuk mencegah error jika tabel belum terbentuk sempurna
        try:
            c.execute("SELECT COUNT(*) FROM dapur_sppg")
            total_dapur = c.fetchone()[0]
        except sqlite3.OperationalError:
            total_dapur = 0
            
        conn.close()
        
        return render_template('superadmin.html', active_page='dashboard', total_users=total_users, total_dapur=total_dapur)
        
    elif role == 'plkb':
        return render_template('plkb.html')
    else:
        # Default untuk Kader dan Dapur
        return render_template('index.html')


@main_bp.route('/ubah_profil', methods=['POST'])
def ubah_profil():
    # Pastikan user sudah login
    if not session.get('logged_in'):
        return redirect('/login')

    username = session.get('username')
    
    # 1. Menangani Update Foto Profil
    if 'foto_profil' in request.files:
        file = request.files['foto_profil']
        if file and file.filename != '':
            filename = secure_filename(file.filename)
            # Tambahkan username di depan nama file agar unik dan tidak menimpa user lain
            filename = f"{username}_{filename}"
            
            # Pastikan folder static/uploads ada
            upload_folder = current_app.config.get('UPLOAD_FOLDER', 'static/uploads')
            os.makedirs(upload_folder, exist_ok=True)
            
            filepath = os.path.join(upload_folder, filename)
            file.save(filepath)
            
            # Update session agar foto langsung berubah di UI
            session['foto_profil'] = filename
            
            # Update ke database
            conn = sqlite3.connect(DB_NAME)
            c = conn.cursor()
            try:
                c.execute("UPDATE users SET foto_profil = ? WHERE username = ?", (filename, username))
            except sqlite3.OperationalError:
                # Jika kolom foto_profil belum ada di tabel users, tambahkan otomatis
                c.execute("ALTER TABLE users ADD COLUMN foto_profil TEXT")
                c.execute("UPDATE users SET foto_profil = ? WHERE username = ?", (filename, username))
            conn.commit()
            conn.close()

    # 2. Menangani Update Password (Opsional)
    password_baru = request.form.get('password_baru')
    if password_baru:
        conn = sqlite3.connect(DB_NAME)
        c = conn.cursor()
        c.execute("UPDATE users SET password = ? WHERE username = ?", (password_baru, username))
        conn.commit()
        conn.close()

    flash('Profil berhasil diperbarui!', 'success')
    # Kembali ke halaman sebelumnya, atau ke dashboard jika tidak ada referrer
    return redirect(request.referrer or '/')