from os import remove

from flask import make_response, request, abort
from flask.views import View

from pycs.database.File import File
from pycs.frontend.notifications.NotificationManager import NotificationManager


class RemoveFile(View):
    """
    remove a given file
    """
    # pylint: disable=arguments-differ
    methods = ['POST']


    def dispatch_request(self, identifier):
        # extract request data
        data = request.get_json(force=True)

        if not data.get('remove', False):
            return abort(400)

        # find file
        file = File.query.get(identifier)
        if file is None:
            return abort(400)

        # check if project uses an external data directory
        if file.project.external_data:
            return abort(400)

        # remove file from database
        file.remove()

        # remove file from folder
        remove(file.path)

            # TODO remove temp files

        # send notification
        NotificationManager.removed("file", file.serialize())
        return make_response()