import os, fitz, cv2, numpy as np, sqlite3, json
from flask import Flask, render_template, request, session, redirect, jsonify, url_for
from werkzeug.security import generate_password_hash, check_password_hash
from werkzeug.utils import secure_filename

app = Flask(__name__)
app.secret_key = "voter_master_pro_2026"

# ডিরেক্টরি সেটআপ
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
FOLDERS = ['static/uploads', 'static/slips', 'storage/pdfs', 'templates', 'static/css', 'static/js']
for f in FOLDERS: os.makedirs(os.path.join(BASE_DIR, f), exist_ok=True)

def get_db():
    conn = sqlite3.connect(os.path.join(BASE_DIR, 'votermaster.db'))
    conn.row_factory = sqlite3.Row
    return conn

@app.before_first_request
def init_db():
    conn = get_db()
    conn.execute('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, u TEXT UNIQUE, p TEXT)')
    conn.execute('CREATE TABLE IF NOT EXISTS settings (u_id INTEGER PRIMARY KEY, cfg TEXT)')
    conn.execute('CREATE TABLE IF NOT EXISTS cands (id INTEGER PRIMARY KEY AUTOINCREMENT, u_id INTEGER, name TEXT, area TEXT, center TEXT, photo TEXT, marka TEXT)')
    if not conn.execute("SELECT * FROM users WHERE u='admin'").fetchone():
        conn.execute("INSERT INTO users (u, p) VALUES (?, ?)", ('admin', generate_password_hash('admin123')))
    conn.commit()
    conn.close()

# মূল হোম পেজ
@app.route('/')
def index():
    if 'u_id' not in session: return redirect(url_for('login'))
    u_id = session['u_id']
    conn = get_db()
    row = conn.execute('SELECT cfg FROM settings WHERE u_id=?', (u_id,)).fetchone()
    cfg = json.loads(row['cfg']) if row else {"box_h":420,"box_w":380,"bl_x":15,"bl_y":50,"br_x":285,"br_y":50,"h_x":100,"h_y":10,"stack":10}
    cands = conn.execute('SELECT * FROM cands WHERE u_id=?', (u_id,)).fetchall()
    pdfs = os.listdir(os.path.join(BASE_DIR, 'storage/pdfs')) if os.path.exists(os.path.join(BASE_DIR, 'storage/pdfs')) else []
    u_dir = os.path.join(BASE_DIR, 'static/slips', str(u_id))
    all_slips = sorted(os.listdir(u_dir)) if os.path.exists(u_dir) else []
    conn.close()
    return render_template('index.html', cfg=cfg, candidates=cands, pdfs=pdfs, slips=all_slips, u_id=u_id)

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        conn = get_db()
        user = conn.execute('SELECT * FROM users WHERE u=?', (request.form['u'],)).fetchone()
        if user and check_password_hash(user['p'], request.form['p']):
            session['u_id'] = user['id']
            return redirect(url_for('index'))
    return render_template('login.html')

@app.route('/logout')
def logout(): session.clear(); return redirect(url_for('login'))

if __name__ == '__main__':
    app.run(debug=True)