from flask import Flask, render_template, request, redirect, session, url_for
from flask import make_response
from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas
from io import BytesIO
import mysql.connector
import csv
import hashlib
import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
csv_path = os.path.join(BASE_DIR, 'data.csv')

app = Flask(__name__)
app.secret_key = 'tajny_klic'  # nahraď svým vlastním

# Připojení k databázi
def get_db_connection():
    return mysql.connector.connect(
        host='localhost',
        user='yugo',
        password='abcd1234',
        database='yugo'
    )

# Hashování hesla
def hash_password(password):
    return hashlib.sha256(password.encode()).hexdigest()

@app.route('/', methods=['GET', 'POST'])
def login():
    infobox_text = ""
    try:
        with open(os.path.join(BASE_DIR, 'infobox.txt'), encoding='utf-8') as f:
            infobox_text = f.read()
    except FileNotFoundError:
        infobox_text = ""

    if request.method == 'POST':
        username = request.form['username']
        password = hash_password(request.form['password'])

        conn = get_db_connection()
        cursor = conn.cursor(dictionary=True)
        cursor.execute("SELECT * FROM users WHERE username=%s AND password_hash=%s", (username, password))
        user = cursor.fetchone()
        conn.close()

        if user:
            session['user'] = user
            return redirect(url_for('dashboard'))
        else:
            return 'Neplatné přihlašovací údaje'

    return render_template('login.html', infobox=infobox_text)
@app.route('/dashboard')
def dashboard():
    if 'user' not in session:
        return redirect(url_for('login'))

    misto = session['user']['misto']
    vysledky = []

    with open(csv_path, newline='', encoding='utf-8') as csvfile:
        reader = csv.reader(csvfile, delimiter=';')
        next(reader)  # přeskočit hlavičku
        for row in reader:
            sid = row[0].strip()
            misto_jmeno = row[1]
            cislo = row[2].strip()
            if ' - ' in misto_jmeno:
                radek_misto, jmeno = misto_jmeno.split(' - ', 1)
                if radek_misto.strip() == misto:
                    vysledky.append((sid, jmeno.strip(), cislo))

    return render_template('dashboard.html', misto=misto, vysledky=vysledky)
@app.route('/export_pdf')
def export_pdf():
    if 'user' not in session:
        return redirect(url_for('login'))

    misto = session['user']['misto']
    vysledky = []

    with open(csv_path, newline='', encoding='utf-8') as csvfile:
        reader = csv.reader(csvfile, delimiter=';')
        next(reader)  # přeskočit hlavičku
        for row in reader:
            sid = row[0].strip()
            misto_jmeno = row[1]
            cislo = row[2].strip()
            if ' - ' in misto_jmeno:
                radek_misto, jmeno = misto_jmeno.split(' - ', 1)
                if radek_misto.strip() == misto:
                    vysledky.append((sid, jmeno.strip(), cislo))

    # Vytvoření PDF
    buffer = BytesIO()
    c = canvas.Canvas(buffer, pagesize=A4)
    width, height = A4

    c.setFont("Helvetica-Bold", 14)
    c.drawString(50, height - 50, f"Výpis dat pro místo: {misto}")

    c.setFont("Helvetica", 12)
    y = height - 80
    c.drawString(50, y, "SID")
    c.drawString(150, y, "Jméno")
    c.drawString(350, y, "Číslo")

    y -= 20

    for sid, jmeno, cislo in vysledky:
        if y < 50:  # nová stránka
            c.showPage()
            y = height - 50
        c.drawString(50, y, sid)
        c.drawString(150, y, jmeno)
        c.drawString(350, y, cislo if cislo else "volná pozice")
        y -= 20

    c.showPage()
    c.save()
    buffer.seek(0)

    return make_response(buffer.read(), {
        'Content-Type': 'application/pdf',
        'Content-Disposition': 'inline; filename="vypis.pdf"'
    })
@app.route('/logout')
def logout():
    session.clear()
    return redirect(url_for('login'))

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0')
