import { RoleEntity } from 'modules/role-permission/roles/entities/role.entity';
import { UserEntity } from 'modules/user/entity/users.entity';
import { Column, CreateDateColumn, Entity, JoinTable, ManyToMany, OneToMany, PrimaryGeneratedColumn, UpdateDateColumn } from 'typeorm';

export enum PlanType {
  FREE = 'free',
  BASIC = 'basic',
  PREMIUM = 'premium',
  ENTERPRISE = 'enterprise',
}

@Entity('clients')
export class ClientEntity {
  @PrimaryGeneratedColumn('uuid', { name: 'id' })
  id: string;

  @Column({ name: 'first_name', type: 'varchar', length: 60, nullable: false })
  firstName: string;

  @Column({ name: 'last_name', type: 'varchar', length: 60, nullable: false })
  lastName: string;

  @Column({ name: 'email', type: 'varchar', length: 100, unique: true, nullable: false })
  email: string;

  @Column({
    name: 'plan',
    type: 'enum',
    enum: PlanType,
    default: PlanType.FREE,
  })
  plan: PlanType;

  @Column({ name: 'max_users', type: 'int', default: 5 })
  maxUsers: number;

  @OneToMany(() => UserEntity, user => user.linkedClient)
  linkedUsers: UserEntity[];

  @OneToMany(() => RoleEntity, role => role.client)
  roles: RoleEntity[];

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

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