
from flask import Flask, render_template, request, redirect, url_for, session, send_from_directory, flash
from werkzeug.security import check_password_hash
from db import get_db_connection
import mysql.connector
import os

app = Flask(__name__)
app.secret_key = "senha_forte"

# 👉 Define a pasta de uploads depois de criar o app
UPLOAD_FOLDER = os.path.join(os.getcwd(), "uploads")
app.config["UPLOAD_FOLDER"] = UPLOAD_FOLDER

def get_cursos():
    conn = get_db_connection()
    cursor = conn.cursor(dictionary=True)
    cursor.execute("SELECT id, nome FROM cursos ORDER BY nome ASC")
    cursos = cursor.fetchall()
    conn.close()
    return cursos

@app.route("/")
def index():
    return render_template("index.html")

@app.route("/listar")
def listar():
    curso = request.args.get("curso")
    ano = request.args.get("ano")
    autor = request.args.get("autor")
    tipo_trabalho = request.args.get("tipo_trabalho")

    conn = get_db_connection()
    cursor = conn.cursor(dictionary=True)

    # Query base com JOIN para trazer o nome do curso
    query = """
        SELECT t.id, t.tipo_trabalho, t.titulo, t.autor,
               c.nome AS curso,
               t.data_defesa, t.supervisor, t.presidente,
               t.arguente, t.nota_final, t.ficheiro
        FROM trabalhos t
        JOIN cursos c ON t.curso_id = c.id
        WHERE 1=1
    """
    params = []

    if curso:
        query += " AND c.id = %s"
        params.append(curso)
    if ano:
        query += " AND YEAR(t.data_defesa) = %s"
        params.append(ano)
    if autor:
        query += " AND t.autor LIKE %s"
        params.append("%" + autor + "%")
    if tipo_trabalho:
        query += " AND t.tipo_trabalho = %s"
        params.append(tipo_trabalho)

    query += " ORDER BY t.data_defesa DESC"

    cursor.execute(query, params)
    trabalhos = cursor.fetchall()
    conn.close()

    return render_template("listar.html", trabalhos=trabalhos, cursos=get_cursos())

@app.route("/upload", methods=["GET", "POST"])
def upload():
    # Força sempre o login antes de abrir o formulário
    if "user_id" not in session:
        return redirect(url_for("login"))

    # Se já houver sessão mas não for admin → não deixa submeter
    if session.get("perfil") != "admin":
        return redirect(url_for("listar"))

    # Se for admin → abre o formulário
    conn = get_db_connection()
    cursor = conn.cursor(dictionary=True)

    if request.method == "POST":
        tipo_trabalho = request.form["tipo_trabalho"]
        titulo = request.form["titulo"]
        autor = request.form["autor"]
        curso_id = request.form["curso_id"]
        data_defesa = request.form["data_defesa"]
        supervisor = request.form["supervisor"]
        presidente = request.form["presidente"]
        arguente = request.form["arguente"]
        nota_final = request.form["nota_final"]
        ficheiro = request.files["ficheiro"]
      # ficheiro = request.files["ficheiro"]
        filename = ficheiro.filename
        ficheiro.save(os.path.join(app.config["UPLOAD_FOLDER"], filename))


        cursor.execute("""
            INSERT INTO trabalhos 
            (tipo_trabalho, titulo, autor, curso_id, data_defesa, supervisor, presidente, arguente, nota_final, ficheiro)
            VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
        """, (tipo_trabalho, titulo, autor, curso_id, data_defesa, supervisor, presidente, arguente, nota_final, filename))
        conn.commit()
        flash(" Trabalho Submetido com  Sucesso", "Sucess")

    cursor.execute("SELECT * FROM cursos ORDER BY nome ASC")
    cursos = cursor.fetchall()
    conn.close()

    return render_template("upload.html", cursos=get_cursos())



@app.route("/login", methods=["GET", "POST"])
def login():
    if request.method == "POST":
        email = request.form["email"]
        senha = request.form["senha"]

        conn = get_db_connection()
        cursor = conn.cursor(dictionary=True)
        cursor.execute("SELECT * FROM usuarios WHERE email = %s", (email,))
        user = cursor.fetchone()
        conn.close()

        if user and check_password_hash(user["password_hash"], senha):
            session["user_id"] = user["id"]
            session["perfil"] = user["perfil"]
            session["email"] = user["email"]
            return redirect(url_for("upload"))
        else:
            return render_template("login.html", erro="Credenciais inválidas")

    return render_template("login.html")


@app.route("/logout")
def logout():
    session.clear()
    flash("Saiu da sessão com sucesso.", "info")
    return redirect(url_for("index"))



@app.route("/download/<filename>")
def download(filename):
    return send_from_directory(app.config["UPLOAD_FOLDER"], filename, as_attachment=True)



if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000, debug=True)


