from __future__ import annotations

from typing import Any, Literal

import orjson
from application_sdk.contracts.base import Input
from application_sdk.contracts.types import (
    ConnectionRef,
    FileReference,
    MaxItems,
    TreeSelection,
)
from pydantic import BaseModel, ConfigDict, Field


class A(Base):
    a_very_long_field_name_here: str = Field(
        default="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", alias="{{a}}"
    )
    a_very_long_field_name_here_that_is_really_quite_long: str = Field(
        default="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        alias="{{a}}",
    )
    mode: Literal[
        "alpha", "beta", "gamma", "delta", "epsilon", "zeta", "eta", "theta"
    ] = Field(default="alpha", alias="{{mode}}")
    mode2: Literal[
        "alpha", "beta", "gamma", "delta", "epsilon", "zeta", "eta", "thetaxxxxx"
    ] = "alpha"
    mode3: Literal[
        "alpha",
        "beta",
        "gamma",
        "delta",
        "epsilon",
        "zeta",
        "eta",
        "theta",
        "iota",
        "kappa",
        "lambda",
        "mu",
    ] = Field(
        default="alpha",
        alias="{{mode}}",
        description="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    )
    url = "http://artifact-schemas-example.artifact-schemas-example-app.svc.cluster.localxxxxxxxxxxxxxxxxxxxxxxxx"
    url2: str = (
        "http://artifact-schemas-example.artifact-schemas-example-app.svc.cluster.loc"
    )
    some_name: str = Field(
        default="",
        json_schema_extra={
            "x-lifecycle": "sunset",
            "xxxxxxxxxxxxxxxxx": "yyyyyyyyyyyyyyyyyyyyyy",
        },
    )
    a: str = Field(
        default_factory=lambda: [
            "aaaaaaaaaaaaaaaaaaaaaaaa",
            "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
            "cccccccc",
        ]
    )
    extra: VeryLongConnectorNameForTestingCredentialBodyExtra = Field(
        default_factory=VeryLongConnectorNameForTestingCredentialBodyExtra,
        alias="extra",
    )
    b1: str = Field(
        default="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    )
    b2: str = Field(
        default="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        alias="y",
    )
    c: dict[str, Any] | None = Field(
        default=None, alias="{{some_really_long_key_name_here_xxxxxx}}"
    )
    d: Annotated[list[str], MaxItems(1000)] = Field(
        default_factory=list, deprecated="xxxxxxxxxxxx"
    )
    e: str = Field(
        default="",
        json_schema_extra={"x-lifecycle": "sunset", "xxxxxxxxxxxxxxx": "yyy"},
        deprecated=True,
    )
    ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff: Inner = Field()
    g: Annotated[dict[str, Annotated[list[str], MaxItems(1000)]], MaxItems(1000)] = (
        Field(default_factory=dict, deprecated="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
    )
    include_filter: Annotated[
        dict[str, Annotated[list[str], MaxItems(1000)]], MaxItems(1000)
    ] = Field(default_factory=dict)
    one: list[str] = Field(
        default_factory=lambda: [
            "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
        ]
    )
    two = {
        "k": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    }
    """A docstring line that is very long and goes past the limit of eighty-eight columns for sure."""

    @field_validator(
        "aaaaaaaaaaaaaa",
        "bbbbbbbbbbbbbbbbbbbbbb",
        "cccccccccccccccccc",
        "ddddddddddd",
        mode="before",
    )
    @classmethod
    def f(cls): ...


class AVeryLongConnectorNameThatGoesOnAndOnAndOnAndOnAndOnGeneratedE2EBase(
    SystemAppE2ETest
):
    x = 1


class AVeryLongConnectorNameThatGoesOnAndOnAndOnAndOnGeneratedE2EBase(SystemAppE2ETest):
    x = 1


class ReviewCases(Base):
    """Class docstring, already as renderClass writes it.

    Second line."""

    mode: (
        Literal["alpha", "beta", "gamma", "delta", "epsilon", "zeta", "eta", "theta"]
        | None
    ) = None
    mode2: (
        Literal[
            "alpha",
            "beta",
            "gamma",
            "delta",
            "epsilon",
            "zeta",
            "eta",
            "theta",
            "iota",
            "kappa",
        ]
        | None
    ) = None
    lst: (
        Annotated[
            list[Literal["alpha", "beta", "gamma", "delta", "epsilon", "zeta"]],
            MaxItems(1000),
        ]
        | None
    ) = None
    greeting: str = 'say "hi"'
    both: str = 'it\'s "x"'
    path: str = "C:\\temp\\dir"
    region: str = Field(
        default="東京東京東京東京東京東京東京東京東京東京東京", alias="{{region}}"
    )
    c: str = ""
    """Line one
Example: configure(alpha_parameter, beta_parameter, gamma_parameter, delta_parameter_x)
end"""
    d: str = ""
    """Line one
Set value = compute(alpha_parameter, beta_parameter, gamma_parameter, delta_parameter)
end"""
    tables: list[str] = Field(
        default_factory=lambda: [
            "aaaaaaaaaaaaaaaaaaaa",
            "bbbbbbbbbbbbbbbbbbbbbbbb",
            "cccccccccccccccccccccc",
        ],
        alias="{{tables}}",
    )
    one: list[str] = Field(
        default_factory=lambda: [
            "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
        ],
        alias="{{one}}",
    )
    quoted: str = Field(
        default='say "hi" xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
        alias="{{quoted}}",
    )
    emoji: str = Field(
        default="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx🫠", alias="{{a}}"
    )
