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

from __future__ import annotations
from .actiondto import ActionDto, ActionDtoTypedDict
from .redirectdto import RedirectDto, RedirectDtoTypedDict
from novu_py.types import BaseModel
import pydantic
from typing import Any, Dict, Optional
from typing_extensions import Annotated, NotRequired, TypedDict


class InAppControlDtoTypedDict(TypedDict):
    skip: NotRequired[Dict[str, Any]]
    r"""JSONLogic filter conditions for conditionally skipping the step execution. Supports complex logical operations with AND, OR, and comparison operators. See https://jsonlogic.com/ for full typing reference."""
    body: NotRequired[str]
    r"""Content/body of the in-app message. Required if subject is empty."""
    subject: NotRequired[str]
    r"""Subject/title of the in-app message. Required if body is empty."""
    avatar: NotRequired[str]
    r"""URL for an avatar image. Must be a valid URL or start with / or {{ variable }}."""
    primary_action: NotRequired[ActionDtoTypedDict]
    r"""Primary action button details."""
    secondary_action: NotRequired[ActionDtoTypedDict]
    r"""Secondary action button details."""
    redirect: NotRequired[RedirectDtoTypedDict]
    r"""Redirection URL configuration for the main content click (if no actions defined/clicked).."""
    disable_output_sanitization: NotRequired[bool]
    r"""Disable sanitization of the output."""
    data: NotRequired[Dict[str, Any]]
    r"""Additional data payload for the step."""


class InAppControlDto(BaseModel):
    skip: Optional[Dict[str, Any]] = None
    r"""JSONLogic filter conditions for conditionally skipping the step execution. Supports complex logical operations with AND, OR, and comparison operators. See https://jsonlogic.com/ for full typing reference."""

    body: Optional[str] = None
    r"""Content/body of the in-app message. Required if subject is empty."""

    subject: Optional[str] = None
    r"""Subject/title of the in-app message. Required if body is empty."""

    avatar: Optional[str] = None
    r"""URL for an avatar image. Must be a valid URL or start with / or {{ variable }}."""

    primary_action: Annotated[
        Optional[ActionDto], pydantic.Field(alias="primaryAction")
    ] = None
    r"""Primary action button details."""

    secondary_action: Annotated[
        Optional[ActionDto], pydantic.Field(alias="secondaryAction")
    ] = None
    r"""Secondary action button details."""

    redirect: Optional[RedirectDto] = None
    r"""Redirection URL configuration for the main content click (if no actions defined/clicked).."""

    disable_output_sanitization: Annotated[
        Optional[bool], pydantic.Field(alias="disableOutputSanitization")
    ] = False
    r"""Disable sanitization of the output."""

    data: Optional[Dict[str, Any]] = None
    r"""Additional data payload for the step."""
