from __future__ import annotations

from typing import Literal, Any

import orjson
from pydantic import Field, BaseModel, ConfigDict

from application_sdk.contracts.types import TreeSelection, MaxItems, ConnectionRef, FileReference
from application_sdk.contracts.base import Input


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}}")
