from flask import Blueprint, render_template, request, redirect, url_for, flash, jsonify
from flask_login import login_required, current_user
from app.extensions import db, csrf
from app.models.features import KanbanCard
from app.models.report import Report

kanban_bp = Blueprint("kanban", __name__, url_prefix="/kanban")

STAGES = [
    ("idea", "فكرة", "bg-blue-500/20 text-blue-400 border-blue-500/30"),
    ("analysis", "تحليل", "bg-amber-500/20 text-amber-400 border-amber-500/30"),
    ("execution", "تنفيذ", "bg-purple-500/20 text-purple-400 border-purple-500/30"),
    ("completed", "مكتمل", "bg-emerald-500/20 text-emerald-400 border-emerald-500/30"),
    ("paused", "متوقف", "bg-red-500/20 text-red-400 border-red-500/30"),
]


@kanban_bp.route("/")
@login_required
def index():
    cards = KanbanCard.query.filter_by(user_id=current_user.id).order_by(KanbanCard.position).all()
    reports = Report.query.filter_by(user_id=current_user.id).order_by(Report.created_at.desc()).all()
    return render_template("kanban/index.html", cards=cards, stages=STAGES, reports=reports)


@kanban_bp.route("/add", methods=["POST"])
@login_required
def add():
    title = request.form.get("title", "").strip()
    report_id = request.form.get("report_id", type=int)
    if not title:
        flash("العنوان مطلوب.", "error")
        return redirect(url_for("kanban.index"))
    max_pos = db.session.query(db.func.max(KanbanCard.position)).filter_by(
        user_id=current_user.id, stage="idea").scalar() or 0
    card = KanbanCard(user_id=current_user.id, title=title, report_id=report_id,
                      description=request.form.get("description", "").strip(), position=max_pos + 1)
    db.session.add(card)
    db.session.commit()
    flash("تمت الإضافة.", "success")
    return redirect(url_for("kanban.index"))


@kanban_bp.route("/move/<int:card_id>", methods=["POST"])
@csrf.exempt
@login_required
def move(card_id):
    card = KanbanCard.query.get_or_404(card_id)
    if card.user_id != current_user.id:
        return jsonify({"error": "Access denied"}), 403
    data = request.get_json(silent=True) or request.form
    new_stage = data.get("stage", card.stage)
    valid_stages = [s[0] for s in STAGES]
    if new_stage in valid_stages:
        card.stage = new_stage
        db.session.commit()
    return jsonify({"status": "ok"}) if request.is_json else redirect(url_for("kanban.index"))


@kanban_bp.route("/delete/<int:card_id>", methods=["POST"])
@login_required
def delete(card_id):
    card = KanbanCard.query.get_or_404(card_id)
    if card.user_id != current_user.id:
        flash("Access denied.", "error")
        return redirect(url_for("kanban.index"))
    db.session.delete(card)
    db.session.commit()
    flash("تم الحذف.", "success")
    return redirect(url_for("kanban.index"))
