import {
  Entity,
  Column,
  OneToMany,
} from 'typeorm';
import { BaseEntity } from '../database/base.entity';
import { RolePermissionEntity } from './role-permission.entity';

/**
 * Role entity — tenant-scoped, fully dynamic.
 *
 * Per CLAUDE.md:
 * - Roles fully dynamic, managed per tenant by Admin — never static role enums
 * - No Super Admin in Phase 1 — Admin is highest role, seeded during tenant onboarding
 *
 * Per scope doc:
 * - Predefined: Admin (full), Operations Manager, Trip Coordinator, Sales Team, Guest (read-only)
 * - Custom roles with granular per-module permissions
 */
@Entity('roles')
export class RoleEntity extends BaseEntity {
  @Column({ type: 'varchar', length: 255 })
  name: string;

  @Column({ type: 'varchar', length: 500, nullable: true })
  description: string | null;

  @Column({ type: 'boolean', default: false })
  is_system: boolean; // true for seeded roles (Admin, etc.), prevents deletion

  @OneToMany(() => RolePermissionEntity, (rp) => rp.role, { eager: false })
  permissions: RolePermissionEntity[];
}
