#!/usr/bin/python3

import argparse
from datetime import date, timedelta, datetime
from wcmatch.pathlib import Path


def get_week_start_end(year, week):
    # create a date object for the first day of the year
    first_day = date(year, 1, 1)
    # get the weekday of the first day (0 for Monday, 6 for Sunday)
    first_day_weekday = first_day.weekday()
    # calculate the offset to get the first Monday of the year
    offset = timedelta(days=(7 - first_day_weekday) % 7)
    # add the offset and the number of weeks to get the first day of
    # the given week
    week_start = first_day + offset + timedelta(weeks=(week - 1))
    # add six days to get the last day of the given week
    week_end = week_start + timedelta(days=6)
    # return the start and end dates as strings in yyyy-mm-dd format
    return week_start.strftime('%Y-%m-%d'), week_end.strftime('%Y-%m-%d')


def main():

    parser = argparse.ArgumentParser()
    parser.add_argument("--base-dir",
                        help="base directory to move the images to",
                        default=Path.cwd())
    parser.add_argument("path", help="Path containing images in PNG format")
    options = parser.parse_args()

    data_path = Path(options.path)
    images = data_path.glob(['*.png', '*.webp'])

    base_dir = Path(options.base_dir)

    for image in images:
        data = datetime.fromtimestamp(image.stat().st_mtime)
        current_cal = data.isocalendar()
        base_path = (
            base_dir /
            str(data.year) /
            data.strftime("%m") /
            "-".join(get_week_start_end(data.year, current_cal.week))
        )
        base_path.mkdir(exist_ok=True)
        path = base_path / image.name
        print(f"{image} -> {path}")
        image.rename(path)


if __name__ == "__main__":
    main()