# Copyright (c) 2025 Patrick Motsch
"""
Parse cron strings (5-field or 6-field) to APScheduler CronTrigger kwargs.
Frontend produces: "minute hour day month dow" (5-field) or "sec min hour day month dow" (6-field).
"""

import re
from typing import Any, Dict


def parse_cron_to_kwargs(cron: str) -> Dict[str, Any]:
    """
    Parse cron string to kwargs for APScheduler CronTrigger.
    Supports 5-field (minute hour day month day_of_week) and 6-field (sec min hour day month day_of_week).
    Returns dict with: second, minute, hour, day, month, day_of_week.
    """
    if not cron or not isinstance(cron, str):
        raise ValueError("Invalid cron: empty or not string")
    parts = cron.strip().split()
    if len(parts) == 5:
        minute, hour, day, month, day_of_week = parts
        second = "0"
    elif len(parts) == 6:
        second, minute, hour, day, month, day_of_week = parts
    else:
        raise ValueError(f"Invalid cron format: expected 5 or 6 fields, got {len(parts)}")
    return {
        "second": second,
        "minute": minute,
        "hour": hour,
        "day": day,
        "month": month,
        "day_of_week": day_of_week,
    }
