"""Prisme specification models.

This module contains all the Pydantic models for defining Prisme specifications.
"""

from prisme.spec.analytics import (
    AnalyticsConfig,
    CustomEventSpec,
    DashboardConfig,
    GoogleAnalyticsConfig,
    SessionConfig,
)
from prisme.spec.auth import (
    AdminPanelConfig,
    APIKeyConfig,
    AuthConfig,
    EmailConfig,
    OAuthProviderConfig,
    OrganizationConfig,
    OrgRole,
    Role,
    SignupAccessConfig,
    SignupWhitelist,
)
from prisme.spec.email import (
    EmailServiceConfig,
    EmailTemplateSpec,
)
from prisme.spec.exposure import (
    CRUDOperations,
    FrontendExposure,
    GraphQLExposure,
    GRPCExposure,
    MCPExposure,
    PaginationConfig,
    PaginationStyle,
    RESTExposure,
    SSEExposure,
    StreamingConfig,
    WebSocketExposure,
)
from prisme.spec.fields import FieldSpec, FieldType, FilterOperator
from prisme.spec.model import Model, ModelSpec, Relationship, RelationshipSpec
from prisme.spec.naming import (
    CaseStyle,
    ClassNamingConfig,
    ColumnNamingConfig,
    EndpointNamingConfig,
    NamingConfig,
    PluralStyle,
    TableNamingConfig,
    VariableNamingConfig,
)
from prisme.spec.overrides import DeliveryOverrides, FrontendOverrides, MCPOverrides
from prisme.spec.privacy import (
    DataClassification,
    DataSubjectRightsConfig,
    FieldPrivacyConfig,
    GDPRModelConfig,
    LegalBasis,
    PrivacyConfig,
    RetentionPolicy,
)
from prisme.spec.project import (
    BackendConfig,
    DatabaseConfig,
    DesignConfig,
    ExposureConfig,
    ExposureDefaults,
    ExtensionConfig,
    FrontendConfig,
    FrontendExposureConfig,
    GeneratorConfig,
    GraphQLConfig,
    GRPCConfig,
    MCPConfig,
    ProjectSpec,
    RESTConfig,
    SSEConfig,
    StreamingBusConfig,
    TestingConfig,
    WebSocketConfig,
    WidgetConfig,
)
from prisme.spec.stack import (
    FileStrategy,
    StackSpec,
)

# v2 alias: Field = FieldSpec (can't live in fields.py due to pydantic.Field collision)
Field = FieldSpec

__all__ = [
    "APIKeyConfig",
    "AdminPanelConfig",
    "AnalyticsConfig",
    "AuthConfig",
    "BackendConfig",
    "CRUDOperations",
    "CaseStyle",
    "ClassNamingConfig",
    "ColumnNamingConfig",
    "CustomEventSpec",
    "DashboardConfig",
    "DataClassification",
    "DataSubjectRightsConfig",
    "DatabaseConfig",
    "DeliveryOverrides",
    "DesignConfig",
    "EmailConfig",
    "EmailServiceConfig",
    "EmailTemplateSpec",
    "EndpointNamingConfig",
    "ExposureConfig",
    "ExposureDefaults",
    "ExtensionConfig",
    "Field",
    "FieldPrivacyConfig",
    "FieldSpec",
    "FieldType",
    "FileStrategy",
    "FilterOperator",
    "FrontendConfig",
    "FrontendExposure",
    "FrontendExposureConfig",
    "FrontendOverrides",
    "GDPRModelConfig",
    "GRPCConfig",
    "GRPCExposure",
    "GeneratorConfig",
    "GoogleAnalyticsConfig",
    "GraphQLConfig",
    "GraphQLExposure",
    "LegalBasis",
    "MCPConfig",
    "MCPExposure",
    "MCPOverrides",
    "Model",
    "ModelSpec",
    "NamingConfig",
    "OAuthProviderConfig",
    "OrgRole",
    "OrganizationConfig",
    "PaginationConfig",
    "PaginationStyle",
    "PluralStyle",
    "PrivacyConfig",
    "ProjectSpec",
    "RESTConfig",
    "RESTExposure",
    "Relationship",
    "RelationshipSpec",
    "RetentionPolicy",
    "Role",
    "SSEConfig",
    "SSEExposure",
    "SessionConfig",
    "SignupAccessConfig",
    "SignupWhitelist",
    "StackSpec",
    "StreamingBusConfig",
    "StreamingConfig",
    "TableNamingConfig",
    "TestingConfig",
    "VariableNamingConfig",
    "WebSocketConfig",
    "WebSocketExposure",
    "WidgetConfig",
]
