from flask import Blueprint, views, render_template, request
from utils.util import *
from utils.conf import MAX_CONTENT_LENGTH

com = Blueprint("com", __name__, url_prefix="/com")


class ComView(views.MethodView):
    @staticmethod
    def get():
        return render_template("com_index.html")

    @staticmethod
    def post():
        pic = request.files.get("picture")
        if pic is None:
            return Response("empty body")
        ext = get_ext_name(pic.filename)
        if not is_image_ext(ext):
            return Response("文件类型错误")
        content = pic.read()
        if len(content) > MAX_CONTENT_LENGTH:
            return Response("文件过大，请重新选择")
        cur, rnd = current_time(), rand_str()
        raw_path = f"static/images/{cur}_{rnd}.{ext}"
        rec_path = f"static/images/{cur}_{rnd}-rec.{ext}"
        save_img(raw_path, content)

        ocr_res, img_shape = recognize(content)
        kind = request.form.get("type")
        if kind is not None:
            kind = kind.lower()
        if kind == "raw":
            return Response(data=[{"pos": it[0], "word": it[1][0], "rate": it[1][1]} for it in ocr_res])
        elif kind == "html":
            data = [{"pos": it[0], "word": it[1][0], "rate": it[1][1]} for it in ocr_res]
            draw_img(img_shape, data, rec_path)
            return render_template("com_result.html", raw=raw_path, rec=rec_path, data=data)
        else:
            return Response(data=[it[1][0] for it in ocr_res])


com.add_url_rule("/", view_func=ComView.as_view("com"))
