openapi: 3.1.0
info:
  title: Tenant Lifecycle Presentation Contract
  version: 0.1.0
  description: >-
    Internal presentation contract for rendering tenant lifecycle consistently across
    tenant management surfaces and canonical viewers. This feature introduces no new
    external HTTP endpoints; the contract is expressed as shared schemas for UI-facing
    presentation objects.
paths: {}
components:
  schemas:
    TenantLifecycleValue:
      type: string
      enum:
        - draft
        - onboarding
        - active
        - archived
      description: Canonical tenant lifecycle values defined by the tenant domain.
    TenantLifecycleBadge:
      type: object
      additionalProperties: false
      required:
        - color
        - icon
      properties:
        color:
          type: string
          description: Shared badge or chip tone token.
        icon:
          type: string
          description: Shared icon token for lifecycle rendering.
        iconColor:
          type:
            - string
            - 'null'
          description: Optional icon color override.
    TenantLifecyclePresentation:
      type: object
      additionalProperties: false
      required:
        - value
        - label
        - badge
        - shortDescription
        - longDescription
        - isInvalidFallback
      properties:
        value:
          $ref: '#/components/schemas/TenantLifecycleValue'
        label:
          type: string
          enum:
            - Draft
            - Onboarding
            - Active
            - Archived
        badge:
          $ref: '#/components/schemas/TenantLifecycleBadge'
        shortDescription:
          type: string
          description: Concise explanation for detail, selector, or viewer surfaces.
        longDescription:
          type: string
          description: Detailed helper text for infolists, banners, or canonical viewers.
        isInvalidFallback:
          type: boolean
          description: Reserved for corrupted or unexpected non-canonical values only.
    TenantLifecyclePresentationVariant:
      type: object
      additionalProperties: false
      required:
        - surface
        - showBadge
        - showShortDescription
        - showLongDescription
      properties:
        surface:
          type: string
          enum:
            - table
            - detail
            - selector
            - canonical_viewer
            - banner
        showBadge:
          type: boolean
        showShortDescription:
          type: boolean
        showLongDescription:
          type: boolean
        contextNote:
          type:
            - string
            - 'null'
          description: Optional surface-specific note that does not change lifecycle meaning.
    ReferencedTenantLifecyclePresentation:
      type: object
      additionalProperties: false
      required:
        - tenantId
        - tenantName
        - presentation
        - viewerContext
      properties:
        tenantId:
          type:
            - integer
            - 'null'
        tenantName:
          type:
            - string
            - 'null'
        presentation:
          $ref: '#/components/schemas/TenantLifecyclePresentation'
        viewerContext:
          type: string
          enum:
            - operation_run
            - report
            - audit_reference
        contextNote:
          type:
            - string
            - 'null'
          description: Optional explanatory copy for onboarding or archived references.
