"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""

from __future__ import annotations
from enum import Enum
from novu_py.types import BaseModel
import pydantic
from typing import List, Optional
from typing_extensions import Annotated, NotRequired, TypedDict


class WeekDays(str, Enum):
    MONDAY = "monday"
    TUESDAY = "tuesday"
    WEDNESDAY = "wednesday"
    THURSDAY = "thursday"
    FRIDAY = "friday"
    SATURDAY = "saturday"
    SUNDAY = "sunday"


class Ordinal(str, Enum):
    ONE = "1"
    TWO = "2"
    THREE = "3"
    FOUR = "4"
    FIVE = "5"
    LAST = "last"


class OrdinalValue(str, Enum):
    DAY = "day"
    WEEKDAY = "weekday"
    WEEKEND = "weekend"
    SUNDAY = "sunday"
    MONDAY = "monday"
    TUESDAY = "tuesday"
    WEDNESDAY = "wednesday"
    THURSDAY = "thursday"
    FRIDAY = "friday"
    SATURDAY = "saturday"


class MonthlyType(str, Enum):
    EACH = "each"
    ON = "on"


class TimedConfigTypedDict(TypedDict):
    at_time: NotRequired[str]
    week_days: NotRequired[List[WeekDays]]
    month_days: NotRequired[List[str]]
    ordinal: NotRequired[Ordinal]
    ordinal_value: NotRequired[OrdinalValue]
    monthly_type: NotRequired[MonthlyType]


class TimedConfig(BaseModel):
    at_time: Annotated[Optional[str], pydantic.Field(alias="atTime")] = None

    week_days: Annotated[Optional[List[WeekDays]], pydantic.Field(alias="weekDays")] = (
        None
    )

    month_days: Annotated[Optional[List[str]], pydantic.Field(alias="monthDays")] = None

    ordinal: Optional[Ordinal] = None

    ordinal_value: Annotated[
        Optional[OrdinalValue], pydantic.Field(alias="ordinalValue")
    ] = None

    monthly_type: Annotated[
        Optional[MonthlyType], pydantic.Field(alias="monthlyType")
    ] = None
