from .core import login_by_access_token, upload, edit_videos
from .util import cipher


class BilibiliUploader():
    def __init__(self):
        self.access_token = None
        self.refresh_token = None
        self.sid = None
        self.mid = None

    def login_by_access_token(self, access_token, refresh_token=None):
        self.access_token = access_token
        self.refresh_token = refresh_token
        self.sid, self.mid, _ = login_by_access_token(access_token)

    def upload(self,
               parts,
               copyright: int,
               title: str,
               tid: int,
               tag: str,
               desc: str,
               source: str = '',
               cover: str = '',
               no_reprint: int = 0,
               open_elec: int = 1,
               max_retry: int = 5,
               thread_pool_workers: int = 1):
        return upload(self.access_token,
                    self.sid,
                    self.mid,
                    parts,
                    copyright,
                    title,
                    tid,
                    tag,
                    desc,
                    source,
                    cover,
                    no_reprint,
                    open_elec,
                    max_retry,
                    thread_pool_workers)

    def edit(self,
             avid=None,
             bvid=None,
             parts=None,
             insert_index=None,
             copyright=None,
             title=None,
             tid=None,
             tag=None,
             desc=None,
             source=None,
             cover=None,
             no_reprint=None,
             open_elec=None,
             max_retry: int = 5,
             thread_pool_workers: int = 1):

        if not avid and not bvid:
            print("please provide avid or bvid")
            return None, None
        if not avid:
            avid = cipher.bv2av(bvid)
        if not isinstance(parts, list):
            parts = [parts]
        if type(avid) is str:
            avid = int(avid)
        edit_videos(
            self.access_token,
            self.sid,
            self.mid,
            avid,
            bvid,
            parts,
            insert_index,
            copyright,
            title,
            tid,
            tag,
            desc,
            source,
            cover,
            no_reprint,
            open_elec,
            max_retry,
            thread_pool_workers
        )