import { UserRole } from 'common/enum/UserRole.enum';
import {
  Column,
  CreateDateColumn,
  DeleteDateColumn,
  Entity,
  Index,
  JoinColumn,
  ManyToOne,
  PrimaryGeneratedColumn,
  UpdateDateColumn,
} from 'typeorm';
import { PermissionEntity } from './permission.entity';

@Entity('sub_permission')
@Index('idx_sub_permission_name', ['name'], { unique: true })
export class SubPermissionEntity {
  @PrimaryGeneratedColumn('uuid')
  id: string;

  @Column({ unique: true })
  name: string;

  @Column({ name: 'display_name', type: 'varchar', length: 150, nullable: false })
  displayName: string;

  @Column({ nullable: true, name: 'description', type: 'text' })
  description: string;

  @Column({
    name: 'permission_type',
    type: 'enum',
    enum: UserRole,
    default: UserRole.USER,
  })
  permissionType: UserRole;

  @Column({ default: true, name: 'is_active' })
  isActive: boolean;

  @Column({ default: false, name: 'is_system_permission' })
  isSystemPermission: boolean;

  @Column({ default: false, name: 'is_client_permission' })
  isClientPermission: boolean;

  @CreateDateColumn({ name: 'created_at' })
  createdAt: Date;

  @UpdateDateColumn({ name: 'updated_at' })
  updatedAt: Date;

  @DeleteDateColumn({ name: 'deleted_at', nullable: true })
  deletedAt: Date | null;

  @Column({ type: 'uuid', name: 'permission_id' })
  permissionId: string;

  @ManyToOne(() => PermissionEntity, permission => permission.subPermissions, { onDelete: 'CASCADE' }) 
  @JoinColumn({ name: 'permission_id' })
  permission: PermissionEntity;
}
