import argparse
import locale
from pathlib import Path
from datetime import datetime, timedelta

MONDAY = 0  # 0 = Monday, 1=Tuesday, 2=Wednesday...


def get_next_weekday(d, weekday):
    days_ahead = weekday - d.weekday()
    if days_ahead <= 0:  # Target day already happened this week
        days_ahead += 7
    return d + timedelta(days_ahead)


def set_publication_date_for_humans(text: str, publication_date: datetime) -> str:
    locale.setlocale(locale.LC_TIME, "fr_FR")
    date = publication_date.strftime("%d %B %Y")
    return text.replace("{DATE}", date)


def set_publication_date_for_pelican(text: str, publication_date: datetime) -> str:
    date_digits = publication_date.isoformat()[0:10]
    return text.replace("{DATE_DIGITS}", date_digits)


def set_publication_date_for_seo(text: str, publication_date: datetime) -> str:
    locale.setlocale(locale.LC_TIME, "en_US")
    date_utc = publication_date.strftime("%a %b %d %Y")
    return text.replace("{DATE_UTC}", date_utc)


# Find the number of the letter to create
destination_path = Path(f"./content/newsletter")
p = destination_path.glob("craft-letter-*.md")
files = [x for x in p if x.is_file()]
letter_number = len(files) + 1

# Load the newsletter template
template = Path("./template/newsletter.md")
content = template.read_text()


new_content = content.replace("{LETTER_NUMBER}", str(letter_number))

today = datetime.today()
next_monday = get_next_weekday(today, MONDAY)

new_content = set_publication_date_for_humans(new_content, next_monday)

new_content = set_publication_date_for_pelican(new_content, next_monday)

new_content = set_publication_date_for_seo(new_content, next_monday)

# Create the new file
destination = destination_path / f"craft-letter-{letter_number}.md"
destination.write_text(new_content)

print(f"Created letter #{letter_number}: {destination}")

# Load the homepage template
template = Path("./template/index.md")
content = template.read_text()

new_content = set_publication_date_for_pelican(content, next_monday)

new_content = set_publication_date_for_seo(new_content, next_monday)

link = f"[lettre n°{letter_number}]({{filename}}/newsletter/craft-letter-{letter_number}.md)"
new_content = new_content.replace("{LINK}", link)

for i in reversed(range(letter_number)):
    link = f"* [Lettre n°{i + 1}]({{filename}}/newsletter/craft-letter-{i + 1}.md)\n"
    new_content += link

# Update the index page
destination = Path("./content/pages/index.md")
destination.write_text(new_content)

print(f"Updated index page: {destination}")
