from flask import current_app, flash, redirect, render_template, url_for
from flask_login import current_user, login_required, logout_user
from . import settings, tasks
from .forms import (ChangePasswordForm, EditGeneralSettingsForm,
                    EditNotificationSettingsForm)
from .. import db
from ..decorators import admin_required
from ..models import Role, User
import os
import uuid


@settings.route('/')
@login_required
def index():
    return redirect(url_for('.edit_general_settings'))


@settings.route('/change_password', methods=['GET', 'POST'])
@login_required
def change_password():
    form = ChangePasswordForm()
    if form.validate_on_submit():
        current_user.password = form.new_password.data
        db.session.commit()
        flash('Your password has been updated.')
        return redirect(url_for('.change_password'))
    return render_template('settings/change_password.html.j2',
                           form=form,
                           title='Change password')


@settings.route('/edit_general_settings', methods=['GET', 'POST'])
@login_required
def edit_general_settings():
    form = EditGeneralSettingsForm()
    if form.validate_on_submit():
        current_user.email = form.email.data
        current_user.setting_dark_mode = form.dark_mode.data
        current_user.username = form.username.data
        db.session.commit()
        flash('Your changes have been saved.')
    form.dark_mode.data = current_user.setting_dark_mode
    form.email.data = current_user.email
    form.username.data = current_user.username
    return render_template('settings/edit_general_settings.html.j2',
                           form=form,
                           title='General settings')


@settings.route('/edit_notification_settings', methods=['GET', 'POST'])
@login_required
def edit_notification_settings():
    form = EditNotificationSettingsForm()
    if form.validate_on_submit():
        current_user.setting_job_status_mail_notifications = \
            form.job_status_mail_notifications.data
        current_user.setting_job_status_site_notifications = \
            form.job_status_site_notifications.data
        db.session.commit()
        flash('Your changes have been saved.')
    form.job_status_mail_notifications.data = \
        current_user.setting_job_status_mail_notifications
    form.job_status_site_notifications.data = \
        current_user.setting_job_status_site_notifications
    return render_template('settings/edit_notification_settings.html.j2',
                           form=form,
                           title='Notification settings')


@settings.route('/delete')
@login_required
def delete():
    """
    View to delete current_user and all associated data.
    """
    tasks.delete_user(current_user.id)
    logout_user()
    flash('Your account has been deleted!')
    return redirect(url_for('main.index'))