import { BaseEntity } from "../../models/base.entity";
import {
  BeforeInsert,
  BeforeUpdate,
  Column,
  Entity,
  JoinColumn,
  OneToMany,
  OneToOne,
  PrimaryGeneratedColumn,
} from "typeorm";
import * as bcrypt from "bcrypt";
import { TokenPayload } from "../../types/token-payload.type";
import { ApiProperty } from "@nestjs/swagger";

@Entity("users")
export class Users {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({default:null})
  full_name: string;

  @Column({
    default:null,
  })
  email: string;
  
  @Column({
    default:null,
  })
  password: string;  

  @Column({
    default:null,
  })
  role_id: number; 

  @Column({
    default:null,
  })
  client_id: number; 

  @Column({
    default:null,
  })
  vendor_id: number; 

  @Column({
    default:null,
  })
  project_id: number; 

  @Column({
    default:null,
  })
  city: string;
  
  @Column({
    default:null,
  })
  location: string;  
  
  @Column({default:null})
  nationality: string;

  @Column({default:0})
  job_title: string;

  @Column({default:null})
  job_type: string;

  @Column({default:0})

  contact_no: string;

  @Column({default:null})
  department_id: number;

  @Column({default:null})
  designation: string;


  public async comparePassword(attempt: string) {
    return await bcrypt.compare(attempt, this.password);
  }

  toResponseObject() {
    const { id, full_name, contact_no, email } = this;
    const responseObject: TokenPayload = {
      id,
      full_name,
      contact_no,
      email
    };

    return responseObject;
  }

  //Model Hooks
  @BeforeInsert()
  emailToLowerCase() {
    this.email = this.email.toLowerCase();
  }

  @BeforeInsert()
  @BeforeUpdate()
  async hashPassword() {
    if (this.password) {
      this.password = await bcrypt.hash(this.password, 10);
    }
  }
}

@Entity("designation")
export class Designation {

  @PrimaryGeneratedColumn()
  id: number;

  @Column({default:null})
  designation:string;
 

}
