import os
import datetime

from bs4 import BeautifulSoup
from urllib.parse import unquote

from Attrap import Attrap


class Attrap_pref39(Attrap):

    # Config
    __HOST = "https://www.jura.gouv.fr"
    __RAA_PAGE = {
        "2024": f"{__HOST}/Publications/Publications-legales/Recueil-des-Actes-Administratifs/Annee-2024",
        "2023": f"{__HOST}/Publications/Recueils-des-actes-administratifs/Recueil-des-actes-administratifs-2023",
        "2022": f"{__HOST}/Publications/Publications-legales/Recueil-des-Actes-Administratifs/Annee-2022",
        "2021": f"{__HOST}/Publications/Publications-legales/Recueil-des-Actes-Administratifs/Annee-2021",
        "2020": f"{__HOST}/Publications/Publications-legales/Recueil-des-Actes-Administratifs/Annee-2020",
        "2019": f"{__HOST}/Publications/Publications-legales/Recueil-des-Actes-Administratifs/Annee-2019",
        "2018": f"{__HOST}/Publications/Publications-legales/Recueil-des-Actes-Administratifs/Annee-2018",
        "2017": f"{__HOST}/Publications/Publications-legales/Recueil-des-Actes-Administratifs/Annee-2017",
        "2016": f"{__HOST}/Publications/Publications-legales/Recueil-des-Actes-Administratifs/Annee-2016",
        "2015": f"{__HOST}/Publications/Publications-legales/Recueil-des-Actes-Administratifs/Annee-2015",
        "2011": f"{__HOST}/Publications/Publications-legales/Recueil-des-Actes-Administratifs/Annee-2011",
        "2010": f"{__HOST}/Publications/Publications-legales/Recueil-des-Actes-Administratifs/Annee-2010",
        "2009": f"{__HOST}/Publications/Publications-legales/Recueil-des-Actes-Administratifs/Annee-2009",
    }
    __USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
    full_name = "Préfecture du Jura"
    short_code = "pref39"

    def __init__(self, data_dir):
        super().__init__(data_dir, self.__USER_AGENT)
        self.enable_tor(10)

    def get_raa(self, keywords):
        pages_to_parse = []
        if self.not_before.year <= 2024:
            pages_to_parse.append(self.__RAA_PAGE["2024"])
        if self.not_before.year <= 2023:
            pages_to_parse.append(self.__RAA_PAGE["2023"])
        if self.not_before.year <= 2022:
            pages_to_parse.append(self.__RAA_PAGE["2022"])
        if self.not_before.year <= 2021:
            pages_to_parse.append(self.__RAA_PAGE["2021"])
        if self.not_before.year <= 2020:
            pages_to_parse.append(self.__RAA_PAGE["2020"])
        if self.not_before.year <= 2019:
            pages_to_parse.append(self.__RAA_PAGE["2019"])
        if self.not_before.year <= 2018:
            pages_to_parse.append(self.__RAA_PAGE["2018"])
        if self.not_before.year <= 2017:
            pages_to_parse.append(self.__RAA_PAGE["2017"])
        if self.not_before.year <= 2016:
            pages_to_parse.append(self.__RAA_PAGE["2016"])
        if self.not_before.year <= 2015:
            pages_to_parse.append(self.__RAA_PAGE["2015"])
        if self.not_before.year <= 2011:
            pages_to_parse.append(self.__RAA_PAGE["2011"])
        if self.not_before.year <= 2010:
            pages_to_parse.append(self.__RAA_PAGE["2010"])
        if self.not_before.year <= 2009:
            pages_to_parse.append(self.__RAA_PAGE["2009"])

        elements = []
        for raa_page in pages_to_parse:
            page_content = self.get_page(raa_page, "get").content
            for element in self.get_raa_elements(page_content):
                elements.append(element)

        self.parse_raa(elements, keywords)
        self.mailer()

    def get_raa_elements(self, page_content):
        elements = []
        # On charge le parser
        soup = BeautifulSoup(page_content, "html.parser")

        # On récupère chaque block de card
        for block in soup.select(".fr-card__content"):
            a = block.select("a.fr-card__link")[0]
            if a.get("href") and a["href"].endswith(".pdf"):
                if a["href"].startswith("/"):
                    url = f"{self.__HOST}{a['href']}"
                else:
                    url = a["href"]

                url = unquote(url)
                name = a.get_text().strip()
                
                date_str = block.select("p.fr-card__detail")[0].get_text().replace("Publié le ", "")
                date = datetime.datetime.strptime(date_str, "%d/%m/%Y")
                
                raa = Attrap.RAA(url, date, name)
                elements.append(raa)
        return elements