import {
  Entity,
  PrimaryGeneratedColumn,
  Column,
  CreateDateColumn,
  UpdateDateColumn,
  ManyToMany,
  JoinTable,
} from 'typeorm';
import { Role } from '../../role/entities/role.entity';
import { Permission } from '../../permission/entities/permission.entity';

@Entity('users')
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  firstName: string;

  @Column()
  lastName: string;

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

  @Column({ nullable: true, type: 'varchar', length: 20 })
  phone_number: string;  // ← ADD THIS!

  @Column({ select: false })
  password: string;

  @Column({ default: true, select: false })
  isActive: boolean;

  @Column({ nullable: true, type: 'varchar', length: 10, select: false })
  otpCode: string | null;

  @Column({ nullable: true, type: 'datetime', select: false })
  otpExpires: Date | null;

  @Column({ default: 0, select: false })
  otpAttempts: number;

  @Column({ nullable: true, type: 'varchar', length: 20, select: false })
  otpType: string | null;

  @Column({ default: false, select: false })
  isEmailVerified: boolean;

  @Column({ default: false, select: false })
  isApprovedByAdmin: boolean;

  @Column({ default: false, select: false })
  isClient: boolean;
  @Column({ default: 'pending', type: 'varchar', length: 20, select: false })
  status: string;

  @ManyToMany(() => Role, (role) => role.users)
  @JoinTable({
    name: 'user_roles',
    joinColumn: { name: 'user_id', referencedColumnName: 'id' },
    inverseJoinColumn: { name: 'role_id', referencedColumnName: 'id' },
  })
  roles: Role[];

  @Column({
    type: 'enum',
    enum: ['QRS', 'TQS'],
    nullable: true,
    default: null,
  })
  primary_scheme: 'QRS' | 'TQS' | null;

  @ManyToMany(() => Permission, (permission) => permission.users)
  @JoinTable({
    name: 'user_permissions',
    joinColumn: { name: 'user_id', referencedColumnName: 'id' },
    inverseJoinColumn: { name: 'permission_id', referencedColumnName: 'id' },
  })
  permissions: Permission[];

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

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