from ..forms.admin import EditDataset
from ..models import Dataset, User
from ..tools.data import check_dataset_exists
from ..tools.forms import get_dataset_choices, send_errors_to_client
from ..tools.logs import write

from flask import Blueprint, jsonify, render_template
from flask.helpers import abort, flash, redirect, request, url_for
from flask_login import login_required

editor = Blueprint(
    name='editor',
    import_name=__name__,
    template_folder='templates',
    static_folder='static'
)

@editor.route('/', methods=['GET','POST'])
@login_required
def _editor():
    form = EditDataset()
    form.dataset.choices = get_dataset_choices()
    if request.method == 'POST':
        if form.validate_on_submit():
            id = request.form.get('dataset')
            return jsonify({'success': 'Selected dataset', 'redirect_to': url_for('editor._editor_console', id=id)}),200
        return send_errors_to_client(form=form)
    form.process()
    return render_template('/editor/index.html', form=form)

@editor.route('/<string:id>/')
@check_dataset_exists
@login_required
def _editor_console(id:str=None):
    try:
        dataset = Dataset.query.filter_by(id=id).first()
        datasets = Dataset.query.count()
        users = User.query.all()
    except Exception as exception:
        write('system.log', f'Database error when processing request \'{request.url}\': {exception}')
        return abort(500)
    if not dataset:
        flash('Invalid dataset ID.', 'error')
        return redirect(url_for('admin._questions'))
    return render_template('/editor/console.html', dataset=dataset, datasets=datasets, users=users)