from pathlib import Path

import jwt

from .rfile import RFile


class RDisk:
    def __init__(self, token, uri, jwt_key):
        self.uri = uri
        self.base_path = self.uri.split("file://")[1]
        self.root = self.get_rfile("/")

        if token:
            self.token = jwt.decode(token, jwt_key, algorithms=['RS256', 'HS256'])
        else:
            self.token = None

    def create_rfile_from_template(self, dirname, filename):
        ext = filename.split('.')[-1]
        template = Path(__file__).parent / "templates" / f"template.{ext}"
        if not template.exists():
            raise ValueError(f"Нет шаблона для {ext}")
        dir = self.get_rfile(dirname)
        child = dir.add_child(filename, False)
        child.write(template.read_bytes())
        return child

    def get_rfile(self, id):
        return RFile(id=id, _rdisk=self)

    def get_rfile_by_path(self, path: str):
        id = path.split(self.base_path)[1]
        if not id.startswith("/"):
            id = "/" + id
        return RFile(id=id, _rdisk=self)
