from .worker_template import TemplateWorker
from .download.browser import PDFDownloader
from .download.youtube import YouTubeDownloader
from .fetch.runner import get_description
from .upload.runner import upload_to_archive as run_upload
from .compress.runner import shrink_pdf

import time
import logging
logger = logging.getLogger(__name__)

class DownloadWorker(TemplateWorker):
    def __init__(self) -> None:
        self.dl_runner = PDFDownloader().download
        self.yt_runner = YouTubeDownloader().save_video
        super().__init__()

    def _handle_article(self, article_watcher):
        article = article_watcher.article
        u = article.article_url

        if "youtu.be/" in u or "youtube.com/" in u:
            action = self.yt_runner
        else:
            action = self.dl_runner

        super()._handle_article(article_watcher, action)
        article_watcher.download_completed = True



class FetchWorker(TemplateWorker):
    def __init__(self) -> None:
        super().__init__()

    def _handle_article(self, article_watcher):
        action = get_description # function
        super()._handle_article(article_watcher, action)
        article_watcher.fetch_completed = True



class UploadWorker(TemplateWorker):
    def __init__(self) -> None:
        super().__init__()
    


    def _handle_article(self, article_watcher):
        def action(*args, **kwargs):
            time.sleep(10) # uploads to archive are throttled to 15/minute, but 5s still triggers a blacklisting
            return run_upload(*args, **kwargs)

        super()._handle_article(article_watcher, action)
        article_watcher.upload_completed = True



class CompressWorker(TemplateWorker):
    def __init__(self) -> None:
        super().__init__()

    def _handle_article(self, article_watcher):
        action = shrink_pdf
        super()._handle_article(article_watcher, action)
        article_watcher.compression_completed = True