from flask import Flask, request, make_response, abort, render_template
from flask_restful import Api, Resource

import base
import rest
import auth
from config import cfg

from relay import RThread

app = Flask(__name__)
api = Api(app)

@app.route("/", methods=["POST"])
def default():
    token = request.form.get("token")
    if token == "": abort(401)
    print(token)
    if not auth.checktoken(token): abort(401)

    return render_template("apiinfo.html")
    

class RelaySet(Resource):
    def post(self):
        token = request.headers.get('Authorization')
        if not auth.checktoken(token):
            return make_response('authorized failed', 401)

        reqjson = request.get_json()
        status = reqjson["status"]
        duration = reqjson["duration"]
        if status is None or duration is None:
            return make_response('miss parameters', 400)
        if status<0 or duration<0:
            return make_response('parameters is illegal', 400)
            
        hr = RThread.SetNewStatus(status, duration)
        if hr:
            return make_response('success')
        else:
            return make_response('set relay status failed', 500)


api.add_resource(RelaySet, '/relay/set')

if __name__ == '__main__':
    RThread.start()
    
    port = cfg.getint("server","port")
    app.run(
        host = '0.0.0.0',
        port = port,
        debug = False
    )
    
    RThread.StopThread()