# This file was auto-generated by Fern from our API Definition.

import datetime as dt
import typing

from ....core.datetime_utils import serialize_datetime
from .custom_field_mapping import CustomFieldMapping
from .service_now_credential import ServiceNowCredential

try:
    import pydantic.v1 as pydantic  # type: ignore
except ImportError:
    import pydantic  # type: ignore


class TicketingServiceNowSir(pydantic.BaseModel):
    """
    Configuration for ServiceNow Security Incident Response (SIR).

    [Configuration guide](https://docs.synqly.com/guides/provider-configuration/servicenow-ticketing-setup)
    """

    credential: ServiceNowCredential
    custom_field_mappings: typing.Optional[typing.List[CustomFieldMapping]] = pydantic.Field(default=None)
    """
    Custom field mappings for this provider.
    """

    default_project: typing.Optional[str] = pydantic.Field(default=None)
    """
    Default Project for the integration. This maps to the custom table for tickets. This table should be derived from Security Incident table. Defaults to the security incident table if not specified.
    """

    url: str = pydantic.Field()
    """
    Base URL for the ServiceNow API.
    """

    def json(self, **kwargs: typing.Any) -> str:
        kwargs_with_defaults: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
        return super().json(**kwargs_with_defaults)

    def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]:
        kwargs_with_defaults: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
        return super().dict(**kwargs_with_defaults)

    class Config:
        frozen = True
        smart_union = True
        extra = pydantic.Extra.allow
        json_encoders = {dt.datetime: serialize_datetime}
