import json
import logging
from typing import TYPE_CHECKING

import requests

from main.models import MainArticlePage, MainArticlesPage
from shared.utils import create_image_from_url

if TYPE_CHECKING:
    pass

logger = logging.getLogger()


class TimelineArticleDownloadService:
    api_url = "https://piratipracuji.cz/api/"

    @staticmethod
    def get_existing_articles_slugs() -> list[str]:
        return MainArticlePage.objects.values_list("slug", flat=True)

    def get_articles_response(self):
        response = requests.get(self.api_url)
        data = json.loads(response.text)

        return data

    def perform_update(self):
        existing_articles_slug_list = self.get_existing_articles_slugs()
        parent = MainArticlesPage.objects.all().first()

        if not parent:
            RuntimeError("No MainArticlesPage to import to")

        for article in self.get_articles_response():
            if article["slug"] not in existing_articles_slug_list:
                if "thumbnail" in article:
                    img_filename = "article-" + str(article["id"]) + ".jpg"
                    img_obj = create_image_from_url(
                        url=article["thumbnail"], filename=img_filename
                    )
                else:
                    img_obj = None

                article_to_save = MainArticlePage(
                    title=article["title"],
                    slug=article["slug"],
                    perex=article["description"].replace(" ", " "),
                    author="ČESKÁ PIRÁTSKÁ STRANA",
                    date=article["start_date"],
                    image=img_obj,
                    is_black=article["isFeatured"],
                    content=json.dumps(
                        [
                            {
                                "type": "text",
                                "value": article["content"].replace("</p>", "</p><br>"),
                            }
                        ]
                    ),
                )

                parent.add_child(instance=article_to_save)