import {
  PrimaryGeneratedColumn,
  Column,
  CreateDateColumn,
  UpdateDateColumn,
  Index,
} from 'typeorm';

/**
 * BaseEntity — all feature entities MUST extend this.
 *
 * Columns per CLAUDE.md line 71:
 *   id, tenant_id, created_by, updated_by, created_at, updated_at, is_deleted
 *
 * tenant_id is set automatically by TenantAwareRepository / TenantInterceptor.
 * Services and Controllers NEVER set tenant_id manually.
 */
export abstract class BaseEntity {
  @PrimaryGeneratedColumn('uuid')
  id: string;

  @Index()
  @Column({ type: 'uuid' })
  tenant_id: string;

  @Column({ type: 'uuid', nullable: true })
  created_by: string | null;

  @Column({ type: 'uuid', nullable: true })
  updated_by: string | null;

  @CreateDateColumn({ type: 'timestamptz' })
  created_at: Date;

  @UpdateDateColumn({ type: 'timestamptz' })
  updated_at: Date;

  @Column({ type: 'boolean', default: false })
  is_deleted: boolean;
}
