from typing import Callable, Iterable, Tuple
from flask.json import jsonify
from teal.resource import Resource, View


class LicenceView(View):
    def get(self, *args, **kwargs):
        """Get version of DeviceHub and ereuse-tag."""

        app = self.resource_def.app
        path_licences = app.config['LICENCES']
        with open(path_licences) as f:
            licences = f.read()

        ret = jsonify(licences)
        ret.status_code = 200
        return ret


class LicencesDef(Resource):
    __type__ = 'Licence'
    SCHEMA = None
    VIEW = None  # We do not want to create default / documents endpoint
    AUTH = False

    def __init__(self, app,
                 import_name=__name__,
                 static_folder=None,
                 static_url_path=None,
                 template_folder=None,
                 url_prefix=None,
                 subdomain=None,
                 url_defaults=None,
                 root_path=None,
                 cli_commands: Iterable[Tuple[Callable, str or None]] = tuple()):
        super().__init__(app, import_name, static_folder, static_url_path, template_folder,
                         url_prefix, subdomain, url_defaults, root_path, cli_commands)

        get = {'GET'}
        d = {}

        licence_view = LicenceView.as_view('LicenceView', definition=self)
        self.add_url_rule('/', defaults=d, view_func=licence_view, methods=get)