#!/usr/pkg/bin/python3.13
# -*- coding: utf-8 -*-

__license__ = "GPL v3"
__copyright__ = "2022, Albert Aparicio Isarn <aaparicio at posteo.net>"

"""
https://www.asahi.com/ajw/
"""

from datetime import datetime

from calibre.web.feeds.news import BasicNewsRecipe


class AsahiShimbunEnglishNews(BasicNewsRecipe):
    title = "The Asahi Shimbun"
    __author__ = "Albert Aparicio Isarn"

    description = ("The Asahi Shimbun is widely regarded for its journalism as the most respected daily newspaper in Japan."
                   " The English version offers selected articles from the vernacular Asahi Shimbun, as well as extensive"
                   " coverage of cool Japan,focusing on manga, travel and other timely news.")
    publisher = "The Asahi Shimbun Company"
    publication_type = "newspaper"
    category = "news, japan"
    language = "en_JP"

    index = "https://www.asahi.com"
    masthead_url = "https://p.potaufeu.asahi.com/ajw/css/images/en_logo@2x.png"

    oldest_article = 3
    max_articles_per_feed = 40
    no_stylesheets = True
    remove_javascript = True

    remove_tags_before = {"id": "MainInner"}
    remove_tags_after = {"class": "ArticleText"}
    remove_tags = [{"name": "div", "class": "SnsUtilityArea"}]

    def get_whats_new(self):
        soup = self.index_to_soup(self.index + "/ajw/new")
        news_section = soup.find("div", attrs={"class": "specialList"})

        new_news = []

        for item in news_section.findAll("li"):
            title = item.find("p", attrs={"class": "title"}).string
            date_string = item.find("p", attrs={"class": "date"}).next
            date = date_string.strip()
            url = self.index + item.find("a")["href"]

            new_news.append(
                {
                    "title": title,
                    "date": datetime.strptime(date, "%B %d, %Y").strftime("%Y/%m/%d"),
                    "url": url,
                    "description": "",
                }
            )

        return new_news

    def get_top6(self, soup):
        top = soup.find("ul", attrs={"class": "top6"})

        top6_news = []

        for item in top.findAll("li"):
            title = item.find("p", attrs={"class": "title"}).string
            date_string = item.find("p", attrs={"class": "date"}).next
            date = date_string.strip()
            url = self.index + item.find("a")["href"]

            top6_news.append(
                {
                    "title": title,
                    "date": datetime.strptime(date, "%B %d, %Y").strftime("%Y/%m/%d"),
                    "url": url,
                    "description": "",
                }
            )

        return top6_news

    def get_section_news(self, soup):
        news_grid = soup.find("ul", attrs={"class": "default"})

        news = []

        for item in news_grid.findAll("li"):
            title = item.find("p", attrs={"class": "title"}).string
            date_string = item.find("p", attrs={"class": "date"}).next
            date = date_string.strip()

            url = self.index + item.find("a")["href"]

            news.append(
                {
                    "title": title,
                    "date": datetime.strptime(date, "%B %d, %Y").strftime("%Y/%m/%d"),
                    "url": url,
                    "description": "",
                }
            )

        return news

    def get_section(self, section):
        soup = self.index_to_soup(self.index + "/ajw/" + section)

        section_news_items = self.get_top6(soup)
        section_news_items.extend(self.get_section_news(soup))

        return section_news_items

    def get_special_section(self, section):
        soup = self.index_to_soup(self.index + "/ajw/" + section)
        top = soup.find("div", attrs={"class": "Section"})

        special_news = []

        for item in top.findAll("li"):
            item_a = item.find("a")

            text_split = item_a.text.strip().split("\n")
            title = text_split[0]
            description = text_split[1].strip()

            url = self.index + item_a["href"]

            special_news.append(
                {
                    "title": title,
                    "date": "",
                    "url": url,
                    "description": description,
                }
            )

        return special_news

    def parse_index(self):
        # soup = self.index_to_soup(self.index)

        feeds = [
            ("What's New", self.get_whats_new()),
            ("National Report", self.get_section("national_report")),
            ("Politics", self.get_section("politics")),
            ("Business", self.get_section("business")),
            ("Asia & World - China", self.get_section("asia_world/china")),
            ("Asia & World - Korean Peninsula", self.get_section("asia_world/korean_peninsula")),
            ("Asia & World - Around Asia", self.get_section("asia_world/around_asia")),
            ("Asia & World - World", self.get_section("asia_world/world")),
            ("Sci & Tech", self.get_section("sci_tech")),
            ("Culture - Style", self.get_section("culture/style")),
            ("Culture - Cooking", self.get_section("culture/cooking")),
            ("Culture - Movies", self.get_section("culture/movies")),
            ("Culture - Manga & Anime", self.get_section("culture/manga_anime")),
            ("Travel", self.get_section("travel")),
            ("Sports", self.get_section("sports")),
            ("Opinion - Editorial", self.get_section("opinion/editorial")),
            ("Opinion - Vox Populi", self.get_section("opinion/vox")),
            ("Opinion - Views", self.get_section("opinion/views")),
            ("Special", self.get_special_section("special")),
        ]

        return feeds
