"""Lesson 4: dates - parsing, formatting, Indian financial year, working days."""
import datetime as dt

def fy_label(d):
    y = d.year - (d.month < 4)
    return f"FY {y}-{str(y + 1)[2:]}"

def fy_quarter(d):
    return f"Q{(d.month - 4) % 12 // 3 + 1}"

def add_working_days(d, n, holidays=()):
    while n:
        d += dt.timedelta(days=1)
        if d.weekday() < 5 and d not in holidays:
            n -= 1
    return d

d = dt.datetime.strptime("04-10-2026", "%d-%m-%Y").date()
print("Parsed:", d, "| weekday:", d.strftime("%A"))
print("Formatted:", d.strftime("%d %b %Y"))
print(fy_label(d), fy_quarter(d), "|", fy_label(dt.date(2026, 2, 10)), fy_quarter(dt.date(2026, 2, 10)))
print("30 days later:", d + dt.timedelta(days=30))
print("5 working days after Thu 1 Oct, with Fri 2 Oct a holiday:", add_working_days(dt.date(2026, 10, 1), 5, {dt.date(2026, 10, 2)}))
end_of_month = (d.replace(day=28) + dt.timedelta(days=4)).replace(day=1) - dt.timedelta(days=1)
print("End of month:", end_of_month)
print("Days to FY end:", (dt.date(2027, 3, 31) - d).days)
