#!/usr/bin/env python3
"""Generate a one-time pad of uppercase letters from /dev/urandom."""
import sys

def generate_daybook(weeks: int = 52):
    for week in range(1, weeks + 1):
        with open(f"daybook_week_{week:02d}.txt", "w") as f:
            f.write(f"WEEK {week:02d}\n\n")
            f.write(format_pad(generate_pad(500)))

def generate_pad(num_letters: int) -> str:
    """Read raw bytes from /dev/urandom and map them uniformly to A-Z."""
    letters = []
    with open("/dev/urandom", "rb") as f:
        while len(letters) < num_letters:
            b = f.read(1)[0]
            # Reject bytes >= 234 to avoid modulo bias.
            # 234 = 9 * 26, so bytes 0..233 map uniformly to 0..25.
            if b < 234:
                letters.append(chr((b % 26) + 65))
    return "".join(letters)


def format_pad(text: str, group_size: int = 5, groups_per_line: int = 10) -> str:
    """Format as 5-letter groups, 10 groups per line — classic OTP layout."""
    groups = [text[i:i + group_size] for i in range(0, len(text), group_size)]
    lines = [" ".join(groups[i:i + groups_per_line])
             for i in range(0, len(groups), groups_per_line)]
    return "\n".join(lines)


if __name__ == "__main__":
    n = int(sys.argv[1]) if len(sys.argv) > 1 else 500
    print(format_pad(generate_pad(n)))