#検索サーバー用
#これが本物
from flask import Flask, render_template
import flask_login
import flask_wtf
import wtforms
import os
import flask

app = Flask(__name__)
app.secret_key = os.urandom(24)
login_manager = flask_login.LoginManager()
login_manager.init_app(app)

from MULTI.search_vec import vector
from MULTI.search_key import keyword
from MULTI.search_doc import document
from MULTI.search_view import view
from MULTI.graph import graph
from MULTI.form import form

app.register_blueprint(vector)

app.register_blueprint(keyword)

app.register_blueprint(document)

app.register_blueprint(view)

app.register_blueprint(graph)

app.register_blueprint(form)


class User(flask_login.UserMixin):
    def __init__(self, user_id):
        self.id = user_id

@login_manager.user_loader
def load_user(user_id):
    return User(user_id)

class LoginForm(flask_wtf.FlaskForm):
    user_id = wtforms.StringField(
            'user_id',
            [wtforms.validators.DataRequired(), wtforms.validators.Length(min=3, max=20)])
    password = wtforms.PasswordField(
            'password',
            [wtforms.validators.DataRequired(), wtforms.validators.Length(min=4, max=20)])

@app.route('/', methods=['GET'])
def index():
    ''' トップページ（ログイン不要） '''
    return render_template('top.html')

@app.route('/login', methods=['GET', 'POST'])
def login():
    ''' ログイン '''
    form = LoginForm(flask.request.form)

    # validationチェック
    if form.validate_on_submit():
        # 通常はDB等で認証しますが割愛してハードコーディング
        if form.password.data == '3qgFrrYOkXsXgkK1ZmAH' or form.password.data == 'hDMlSvs5n33bQgisn1CA' or form.password.data == '1022':
            # ログインの実行
            user = User(form.user_id.data)
            flask_login.login_user(user)
            # ログインに成功したらmemberページへ飛びます
            return flask.redirect('/form/ja')
        else:
            # ログイン失敗のメッセージを書いたり
            pass

    # GET時やログイン
    return flask.render_template('login.html',form=form)

@app.route('/logout', methods=['GET'])
def logout():
    ''' ログアウト '''
    flask_login.logout_user()
    return 'ログアウトしました'

@login_manager.unauthorized_handler
def unauthorized():
    return flask.redirect('/login')

if __name__ == "__main__":
    app.run(host='153.120.135.103', port = 80, debug=True)