import cv2
import os

from PIL import Image
from eventlet import tpool
from flask import abort
from flask import send_from_directory
from flask.views import View

from pycs.util import file_ops
from pycs.database.File import File
from pycs.database.Project import Project


class GetResizedFile(View):
    """
    returns binary file after resizing
    """
    # pylint: disable=arguments-differ
    methods = ['GET']

    def dispatch_request(self, file_id: int, max_width: int, max_height: int = 2**24):
        # get file from database
        file = File.query.get(file_id)
        if file is None:
            abort(404, "File object not found")

        if not os.path.exists(file.absolute_path):
            abort(404, "File not found!")

        project = file.project

        # send data
        file_directory, file_name = tpool.execute(file_ops.resize_file,
                                                  file.id, max_width, max_height)
        return send_from_directory(file_directory, file_name)