from manga_py.crypt import BaseLib
from manga_py.provider import Provider
from .helpers.std import Std


class ShogakukanTameshiyoMe(Provider, Std):
    __local_storage = None
    _site = 'https://shogakukan.tameshiyo.me'
    img_url = '/imgDeliver?gcode='

    def get_archive_name(self) -> str:
        return 'archive'

    def get_chapter_index(self) -> str:
        return '0'

    def get_main_content(self):
        pass

    def get_manga_name(self) -> str:
        return self._get_name('/(\d+)')

    def get_chapters(self):
        return [b'']

    def before_file_save(self, url, idx):
        _url = self._site + self.img_url + self.__local_storage['code']
        _url = self.http_post(_url, data={
            'base64': '1',
            'vsid': self.__local_storage['vsid'],
            'trgCode': url,
        }, headers={'Referer': self._site})
        return _url

    def save_file(self, idx=None, callback=None, url=None, in_arc_name=None):
        if url is None:
            _url = self.get_current_file()
        else:
            _url = url

        _path, idx, _url = self._save_file_params_helper(_url, idx)
        _path += '.jpg'

        with open(_path, 'wb') as file:
            file.write(BaseLib.base64decode(_url))

        self._archive.add_file(_path, in_arc_name)
        callable(callback) and callback()

        return _path

    @property
    def chapter_url(self):
        url = self.chapter
        if isinstance(url, bytes):
            url = self.get_url()
        return url

    def get_files(self):
        parser = self.html_fromstring(self.chapter_url)
        self.__local_storage = {
            'vsid': parser.cssselect('input[data-key="vsid"]')[0].get('value'),
            'code': parser.cssselect('input[data-key="isbn1kan"]')[0].get('value'),
        }
        return [i.get('value') for i in parser.cssselect('input[data-key="imageCodes"]')]

    def get_cover(self) -> str:
        pass

    def book_meta(self) -> dict:
        # todo meta
        pass


main = ShogakukanTameshiyoMe
