/**
 * @aurora-catalyst-generated
 * @source cliter/iam/tag.aurora.yaml
 */
import { ApiProperty } from '@nestjs/swagger';

export class IamTagDto {
  @ApiProperty({
    type: String,
    description:
      'Unique identifier for the tag. UUID v4 format, generated automatically on creation. Used as primary key and for referencing this tag across the system.',
  })
  id: string;

  @ApiProperty({
    type: Number,
    description:
      'Auto-incrementing sequential identifier for the tag. Used for internal ordering, efficient queries, and legacy system compatibility. Unlike the UUID "id", this provides a human-readable sequential number that maintains insertion order. Useful for pagination and sorting operations.',
  })
  rowId: number;

  @ApiProperty({
    type: String,
    description:
      'The tag name or label (e.g., "VIP", "Beta-Tester", "EMEA-Region", "Finance-Department"). Limited to 64 characters for consistency with account.tags array elements. Should be descriptive and follow organizational naming conventions. Case-sensitive for precise matching. Recommended format: PascalCase or kebab-case for multi-word tags. Cannot be empty. Enforced as unique at database level to prevent duplicate tags and ensure consistent referencing across accounts.',
  })
  name: string;

  @ApiProperty({
    type: String,
    description:
      'Timestamp when the tag was created. Automatically set on record insertion. Part of the audit trail for tracking tag lifecycle and usage patterns. Used for reporting on tag creation and organizational metadata evolution.',
  })
  createdAt?: string;

  @ApiProperty({
    type: String,
    description:
      'Timestamp of the last modification to this tag. Automatically updated on any field change (typically name changes). Used for tracking tag evolution and cache invalidation. Helps identify recently modified tags for synchronization and audit purposes.',
  })
  updatedAt?: string;

  @ApiProperty({
    type: String,
    description:
      'Soft delete timestamp. NULL indicates an active tag. When set, the tag is excluded from normal queries but preserved for audit trail and historical data integrity. Soft-deleted tags remain referenced in account.tags arrays until those accounts are updated. Used for maintaining data consistency while allowing tag cleanup. Tags can be recovered by setting this to NULL.',
  })
  deletedAt?: string;
}
