import fsspec
import os
from fsspec.implementations.local import LocalFileSystem
from django.conf import settings
from django.http.response import FileResponse, HttpResponseNotFound, HttpResponseRedirect
from django.views import static
from rest_framework.views import APIView
from urllib.parse import urlparse


class IndexView(APIView):
    def get(self, request, format=None):
        if settings.FRONTEND_URL:
            return HttpResponseRedirect(settings.FRONTEND_URL)
        return static.serve(request, 'index.html', document_root=str(settings.FRONTEND_BUILD_DIR))


class TerminalView(APIView):
    def get(self, request, format=None):
        response = static.serve(request, 'terminal.html', document_root=str(settings.FRONTEND_BUILD_DIR))
        response['X-Frame-Options'] = 'SAMEORIGIN'
        return response


class AppDistView(APIView):
    def get(self, request, version=None, path=None, format=None):
        fs = fsspec.filesystem(urlparse(settings.APP_DIST_STORAGE).scheme)
        url = f'{settings.APP_DIST_STORAGE}/{version}/{path}'
        if isinstance(fs, LocalFileSystem):
            if not fs.exists(url):
                return HttpResponseNotFound()
            return FileResponse(fs.open(url), filename=os.path.basename(url))
        else:
            return HttpResponseRedirect(fs.url(url))
