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

from __future__ import annotations
from ascend_sdk import utils
from ascend_sdk.types import BaseModel
from ascend_sdk.utils import validate_open_enum
from enum import Enum
from pydantic.functional_validators import PlainValidator
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict


class JointTenantsByEntiretyEnrollmentMetadataCreateDividendReinvestmentPlan(
    str, Enum, metaclass=utils.OpenEnumMeta
):
    r"""Option to auto-enroll in Dividend Reinvestment; defaults to true"""

    AUTO_ENROLL_DIVIDEND_REINVESTMENT_UNSPECIFIED = (
        "AUTO_ENROLL_DIVIDEND_REINVESTMENT_UNSPECIFIED"
    )
    DIVIDEND_REINVESTMENT_ENROLL = "DIVIDEND_REINVESTMENT_ENROLL"
    DIVIDEND_REINVESTMENT_DECLINE = "DIVIDEND_REINVESTMENT_DECLINE"


class JointTenantsByEntiretyEnrollmentMetadataCreateFdicCashSweep(
    str, Enum, metaclass=utils.OpenEnumMeta
):
    r"""Option to auto-enroll in FDIC cash sweep; defaults to true"""

    AUTO_ENROLL_FDIC_CASH_SWEEP_UNSPECIFIED = "AUTO_ENROLL_FDIC_CASH_SWEEP_UNSPECIFIED"
    FDIC_CASH_SWEEP_ENROLL = "FDIC_CASH_SWEEP_ENROLL"
    FDIC_CASH_SWEEP_DECLINE = "FDIC_CASH_SWEEP_DECLINE"


class JointTenantsByEntiretyEnrollmentMetadataCreateLegalResidencyStateOfMarriedCouple(
    str, Enum, metaclass=utils.OpenEnumMeta
):
    r"""The legal residency state of a married couple"""

    LEGAL_RESIDENCY_STATE_OF_MARRIED_COUPLE_UNSPECIFIED = (
        "LEGAL_RESIDENCY_STATE_OF_MARRIED_COUPLE_UNSPECIFIED"
    )
    AK = "AK"
    AZ = "AZ"
    AR = "AR"
    CA = "CA"
    DE = "DE"
    FL = "FL"
    HI = "HI"
    ID = "ID"
    IL = "IL"
    IN = "IN"
    KY = "KY"
    LA = "LA"
    MD = "MD"
    MA = "MA"
    MI = "MI"
    MS = "MS"
    MO = "MO"
    NV = "NV"
    NJ = "NJ"
    NM = "NM"
    NY = "NY"
    NC = "NC"
    OH = "OH"
    OK = "OK"
    OR = "OR"
    PA = "PA"
    RI = "RI"
    TN = "TN"
    TX = "TX"
    VT = "VT"
    VA = "VA"
    WA = "WA"
    WI = "WI"
    WY = "WY"


class JointTenantsByEntiretyEnrollmentMetadataCreateTypedDict(TypedDict):
    r"""Enrollment metadata for the Joint Tenants by Entirety Registration enrollment type"""

    legal_residency_state_of_married_couple: (
        JointTenantsByEntiretyEnrollmentMetadataCreateLegalResidencyStateOfMarriedCouple
    )
    r"""The legal residency state of a married couple"""
    dividend_reinvestment_plan: NotRequired[
        JointTenantsByEntiretyEnrollmentMetadataCreateDividendReinvestmentPlan
    ]
    r"""Option to auto-enroll in Dividend Reinvestment; defaults to true"""
    fdic_cash_sweep: NotRequired[
        JointTenantsByEntiretyEnrollmentMetadataCreateFdicCashSweep
    ]
    r"""Option to auto-enroll in FDIC cash sweep; defaults to true"""


class JointTenantsByEntiretyEnrollmentMetadataCreate(BaseModel):
    r"""Enrollment metadata for the Joint Tenants by Entirety Registration enrollment type"""

    legal_residency_state_of_married_couple: Annotated[
        JointTenantsByEntiretyEnrollmentMetadataCreateLegalResidencyStateOfMarriedCouple,
        PlainValidator(validate_open_enum(False)),
    ]
    r"""The legal residency state of a married couple"""

    dividend_reinvestment_plan: Annotated[
        Optional[
            JointTenantsByEntiretyEnrollmentMetadataCreateDividendReinvestmentPlan
        ],
        PlainValidator(validate_open_enum(False)),
    ] = None
    r"""Option to auto-enroll in Dividend Reinvestment; defaults to true"""

    fdic_cash_sweep: Annotated[
        Optional[JointTenantsByEntiretyEnrollmentMetadataCreateFdicCashSweep],
        PlainValidator(validate_open_enum(False)),
    ] = None
    r"""Option to auto-enroll in FDIC cash sweep; defaults to true"""
