from flask import Blueprint, render_template, request, redirect, url_for, flash
from controllers.auth_controller import login_required, admin_required
from models.option_model import OptionModel
from models.temperament_model import TemperamentModel
from utils.i18n import t

option_bp = Blueprint('option', __name__)

@option_bp.route('/')
@login_required
def index():
    options = OptionModel.get_all_options()
    return render_template('options/index.html', options=options)

@option_bp.route('/create', methods=['GET', 'POST'])
@login_required
@admin_required
def create():
    if request.method == 'POST':
        name = request.form.get('name')
        position = request.form.get('position', 1)
        temperament_id = request.form.get('temperament_id') or None
        
        if not name:
            flash(t('messages.name_required', 'Name is required'), 'error')
            return render_template('options/create.html', temperaments=TemperamentModel.get_all_temperaments())
        
        OptionModel.create_option(name, position, temperament_id)
        flash(t('messages.option_created', 'Option created successfully!'), 'success')
        return redirect(url_for('option.index'))
    
    temperaments = TemperamentModel.get_all_temperaments()
    return render_template('options/create.html', temperaments=temperaments)

@option_bp.route('/edit/<int:option_id>', methods=['GET', 'POST'])
@login_required
@admin_required
def edit(option_id):
    option = OptionModel.get_option_by_id(option_id)
    if not option:
        flash(t('messages.option_not_found', 'Option not found'), 'error')
        return redirect(url_for('option.index'))
    
    if request.method == 'POST':
        name = request.form.get('name')
        position = request.form.get('position', 1)
        temperament_id = request.form.get('temperament_id') or None
        
        if not name:
            flash(t('messages.name_required', 'Name is required'), 'error')
            return render_template('options/edit.html', option=option, temperaments=TemperamentModel.get_all_temperaments())
        
        OptionModel.update_option(option_id, name, position, temperament_id)
        flash(t('messages.option_updated', 'Option updated successfully!'), 'success')
        return redirect(url_for('option.index'))
    
    temperaments = TemperamentModel.get_all_temperaments()
    return render_template('options/edit.html', option=option, temperaments=temperaments)

@option_bp.route('/delete/<int:option_id>')
@login_required
@admin_required
def delete(option_id):
    option = OptionModel.get_option_by_id(option_id)
    if not option:
        flash(t('messages.option_not_found', 'Option not found'), 'error')
        return redirect(url_for('option.index'))
    
    OptionModel.delete_option(option_id)
    flash(t('messages.option_deleted', 'Option deleted successfully!'), 'success')
    return redirect(url_for('option.index'))
