# routes/feedback_admin.py
from flask import Blueprint, render_template, request, redirect, url_for, flash
from flask_login import login_required
from extensions import db
from models import FeedbackQuestion, FeedbackOption

feedback_admin_bp = Blueprint('feedback_admin', __name__, url_prefix='/admin/feedback')

@feedback_admin_bp.get('/questions')
@login_required
def list_questions():
    qs = FeedbackQuestion.query.order_by(FeedbackQuestion.created_at.desc()).all()
    return render_template('feedback/manage_questions.html', questions=qs)

@feedback_admin_bp.post('/questions/create')
@login_required
def create_question():
    text = request.form.get('question_text', '').strip()
    qtype = request.form.get('qtype', 'text')
    if not text:
        flash('Question text is required', 'danger')
        return redirect(url_for('feedback_admin.list_questions'))
    q = FeedbackQuestion(question_text=text, qtype=qtype, is_active=True)
    db.session.add(q)
    db.session.commit()
    flash('Question created', 'success')
    return redirect(url_for('feedback_admin.list_questions'))

@feedback_admin_bp.post('/questions/<int:q_id>/update')
@login_required
def update_question(q_id):
    q = FeedbackQuestion.query.get_or_404(q_id)
    q.question_text = request.form.get('question_text', q.question_text).strip()
    q.qtype = request.form.get('qtype', q.qtype)
    q.is_active = bool(request.form.get('is_active'))
    db.session.commit()
    flash('Question updated', 'success')
    return redirect(url_for('feedback_admin.list_questions'))

@feedback_admin_bp.post('/questions/<int:q_id>/delete')
@login_required
def delete_question(q_id):
    q = FeedbackQuestion.query.get_or_404(q_id)
    db.session.delete(q)
    db.session.commit()
    flash('Question deleted', 'success')
    return redirect(url_for('feedback_admin.list_questions'))

# ----- Options CRUD -----
@feedback_admin_bp.post('/questions/<int:q_id>/options/add')
@login_required
def add_option(q_id):
    q = FeedbackQuestion.query.get_or_404(q_id)
    label = request.form.get('label', '').strip()
    value = request.form.get('value', '').strip() or label
    sort_order = int(request.form.get('sort_order', 0))
    if not label:
        flash('Option label cannot be empty', 'danger')
        return redirect(url_for('feedback_admin.list_questions'))
    db.session.add(FeedbackOption(question_id=q.id, label=label, value=value, sort_order=sort_order))
    db.session.commit()
    flash('Option added', 'success')
    return redirect(url_for('feedback_admin.list_questions'))

@feedback_admin_bp.post('/options/<int:opt_id>/delete')
@login_required
def delete_option(opt_id):
    opt = FeedbackOption.query.get_or_404(opt_id)
    db.session.delete(opt)
    db.session.commit()
    flash('Option deleted', 'success')
    return redirect(url_for('feedback_admin.list_questions'))