from flask import Blueprint, render_template, request, redirect, url_for, flash
from controllers.auth_controller import login_required, admin_required
from models.question_model import QuestionModel
from models.feature_model import FeatureModel
from models.option_model import OptionModel
from utils.i18n import t

question_bp = Blueprint('question', __name__)

@question_bp.route('/')
@login_required
def index():
    questions = QuestionModel.get_all_questions()
    return render_template('questions/index.html', questions=questions)

@question_bp.route('/create', methods=['GET', 'POST'])
@login_required
@admin_required
def create():
    if request.method == 'POST':
        name = request.form.get('name')
        feature_id = request.form.get('feature_id')
        option_id = request.form.get('option_id') or None
        
        if not name or not feature_id:
            flash(t('messages.name_feature_required', 'Name and feature are required'), 'error')
            return render_template('questions/create.html', features=FeatureModel.get_all_features(), options=OptionModel.get_all_options())
        
        QuestionModel.create_question(name, feature_id, option_id=int(option_id) if option_id else None)
        flash(t('messages.question_created', 'Question created successfully!'), 'success')
        return redirect(url_for('question.index'))
    
    features = FeatureModel.get_all_features()
    options = OptionModel.get_all_options()
    return render_template('questions/create.html', features=features, options=options)

@question_bp.route('/edit/<int:question_id>', methods=['GET', 'POST'])
@login_required
@admin_required
def edit(question_id):
    question = QuestionModel.get_question_by_id(question_id)
    if not question:
        flash(t('messages.question_not_found', 'Question not found'), 'error')
        return redirect(url_for('question.index'))
    
    if request.method == 'POST':
        name = request.form.get('name')
        feature_id = request.form.get('feature_id')
        option_id = request.form.get('option_id') or None
        
        if not name or not feature_id:
            flash(t('messages.name_feature_required', 'Name and feature are required'), 'error')
            return render_template('questions/edit.html', question=question, features=FeatureModel.get_all_features(), options=OptionModel.get_all_options())
        
        QuestionModel.update_question(question_id, name, feature_id, option_id=int(option_id) if option_id else None)
        flash(t('messages.question_updated', 'Question updated successfully!'), 'success')
        return redirect(url_for('question.index'))
    
    features = FeatureModel.get_all_features()
    options = OptionModel.get_all_options()
    return render_template('questions/edit.html', question=question, features=features, options=options)

@question_bp.route('/delete/<int:question_id>')
@login_required
@admin_required
def delete(question_id):
    question = QuestionModel.get_question_by_id(question_id)
    if not question:
        flash(t('messages.question_not_found', 'Question not found'), 'error')
        return redirect(url_for('question.index'))
    
    QuestionModel.delete_question(question_id)
    flash(t('messages.question_deleted', 'Question deleted successfully!'), 'success')
    return redirect(url_for('question.index'))
