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

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


class ResetResults(View):
    """
    removes all results from a given file
    """
    # pylint: disable=arguments-differ
    methods = ['POST']

    def __init__(self, nm: NotificationManager):
        # pylint: disable=invalid-name
        self.nm = nm

    def dispatch_request(self, user: str, file_id: int):
        # pylint: disable=unused-argument
        file = File.get_or_404(file_id)

        # extract request data
        data = request.get_json(force=True)

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


        removed = []

        for result in file.results.all():
            removed.append(result.serialize())

        file.results.delete()

        for result in removed:
            self.nm.remove_result(result)

        return make_response()