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

from __future__ import annotations
from enum import Enum
from gusto_embedded.types import BaseModel
from typing import Optional
from typing_extensions import NotRequired, TypedDict


class ReconcileTaxMethod(str, Enum):
    r"""How Gusto will handle taxes already collected."""

    PAY_TAXES = "pay_taxes"
    REFUND_TAXES = "refund_taxes"


class TaxRefundsTypedDict(TypedDict):
    r"""Describes the taxes which are refundable to the company for this suspension. These may be refunded, or paid
    by Gusto, depending on the value in `reconcile_tax_method`.

    """

    amount: NotRequired[str]
    r"""Dollar amount."""
    description: NotRequired[str]
    r"""What kind of tax this is."""


class TaxRefunds(BaseModel):
    r"""Describes the taxes which are refundable to the company for this suspension. These may be refunded, or paid
    by Gusto, depending on the value in `reconcile_tax_method`.

    """

    amount: Optional[str] = None
    r"""Dollar amount."""

    description: Optional[str] = None
    r"""What kind of tax this is."""


class CompanySuspensionTypedDict(TypedDict):
    r"""Record representing the suspension of a company's Gusto account."""

    uuid: NotRequired[str]
    r"""Unique identifier for this suspension."""
    company_uuid: NotRequired[str]
    r"""Unique identifier for the company which is suspended."""
    effective_date: NotRequired[str]
    r"""Date that the suspension took effect."""
    leaving_for: NotRequired[str]
    r"""Which competitor the company is joining instead. Only required if `reason` is `'switching_provider'`."""
    reason: NotRequired[str]
    r"""Explanation for why the company's account was suspended."""
    reconcile_tax_method: NotRequired[ReconcileTaxMethod]
    r"""How Gusto will handle taxes already collected."""
    file_quarterly_forms: NotRequired[bool]
    r"""Should Gusto file quarterly tax forms on behalf of the company? The correct answer can depend on why the company
    is suspending their account, and how taxes are being reconciled.

    """
    file_yearly_forms: NotRequired[bool]
    r"""Should Gusto file yearly tax forms on behalf of the company? The correct answer can depend on why the company
    is suspending their account, and how taxes are being reconciled.

    """
    comments: NotRequired[str]
    r"""User-supplied comments describing why then are suspending their account."""
    tax_refunds: NotRequired[TaxRefundsTypedDict]
    r"""Describes the taxes which are refundable to the company for this suspension. These may be refunded, or paid
    by Gusto, depending on the value in `reconcile_tax_method`.

    """


class CompanySuspension(BaseModel):
    r"""Record representing the suspension of a company's Gusto account."""

    uuid: Optional[str] = None
    r"""Unique identifier for this suspension."""

    company_uuid: Optional[str] = None
    r"""Unique identifier for the company which is suspended."""

    effective_date: Optional[str] = None
    r"""Date that the suspension took effect."""

    leaving_for: Optional[str] = None
    r"""Which competitor the company is joining instead. Only required if `reason` is `'switching_provider'`."""

    reason: Optional[str] = None
    r"""Explanation for why the company's account was suspended."""

    reconcile_tax_method: Optional[ReconcileTaxMethod] = None
    r"""How Gusto will handle taxes already collected."""

    file_quarterly_forms: Optional[bool] = None
    r"""Should Gusto file quarterly tax forms on behalf of the company? The correct answer can depend on why the company
    is suspending their account, and how taxes are being reconciled.

    """

    file_yearly_forms: Optional[bool] = None
    r"""Should Gusto file yearly tax forms on behalf of the company? The correct answer can depend on why the company
    is suspending their account, and how taxes are being reconciled.

    """

    comments: Optional[str] = None
    r"""User-supplied comments describing why then are suspending their account."""

    tax_refunds: Optional[TaxRefunds] = None
    r"""Describes the taxes which are refundable to the company for this suspension. These may be refunded, or paid
    by Gusto, depending on the value in `reconcile_tax_method`.

    """
