import {
  BaseEntity,
  Column,
  Entity,
  OneToMany,
  PrimaryGeneratedColumn,
} from 'typeorm';
import { RoleMapPermissionEntity } from './role-map-permission.entity';
import { UserEntity } from 'src/modules/user/entities/user.entity';
import { BooleanTransformer } from 'src/utils/transformers/BooleanTransformer';

@Entity('roles')
export class RoleEntity extends BaseEntity {
  @PrimaryGeneratedColumn({ type: 'int', name: 'id' })
  id: number;

  @Column('varchar', { name: 'name', nullable: true, length: 100 })
  name: string | null;

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

  @Column('tinyint', {
    name: 'lock',
    default: () => '0',
    transformer: new BooleanTransformer(),
  })
  lock: boolean;

  @Column('datetime', { name: 'createdAt' })
  createdAt: Date;

  @Column('datetime', { name: 'updatedAt' })
  updatedAt: Date;

  /**
   * Relations
   */
  @OneToMany(
    () => RoleMapPermissionEntity,
    (roleMapPermission) => roleMapPermission.role,
  )
  roleMapPermissions: RoleMapPermissionEntity[];

  @OneToMany(() => UserEntity, (user) => user.role)
  users: UserEntity[];
}
