import { City } from "src/modules/city/entities/city.entity"
import { Country } from "src/modules/country/entities/country.entity"
import { State } from "src/modules/state/entities/state.entity"
import { TeamMember } from "src/modules/team-member/entities/team_member.entity"
import {
  Column,
  Entity,
  PrimaryGeneratedColumn,
  CreateDateColumn,
  UpdateDateColumn,
  DeleteDateColumn,
  ManyToOne,
  JoinColumn,
} from "typeorm"

@Entity("addresses")
export class Address {
  @PrimaryGeneratedColumn()
  id: number

  @Column({ type: "int", nullable: true })
  city_id: number

  @Column({ type: "int", nullable: true })
  country_id: number

  @Column({ type: "int", nullable: true })
  state_id: number

  @Column({ type: "int", nullable: true })
  team_member_id: number

  @Column({ type: "varchar", nullable: true })
  address_line_1: string

  @Column({ type: "varchar", nullable: true })
  address_line_2: string

  @Column({ type: "varchar", nullable: true })
  zipcode: string

  @Column({ type: "varchar", nullable: true })
  address_type: string

  @Column({ type: "boolean", nullable: true, default: true })
  is_emergency_contact: string

  @DeleteDateColumn()
  deleted_at: Date

  @CreateDateColumn({ type: "timestamp", default: () => "NOW()" })
  created_at: Date

  @UpdateDateColumn({ type: "timestamp", default: () => "NOW()" })
  updated_at: Date

  @ManyToOne(() => TeamMember, (teamMember) => teamMember.addresses, {
    onDelete: "CASCADE",
  })
  @JoinColumn({ name: "team_member_id" })
  team_member: TeamMember

  @ManyToOne(() => City, (city) => city.addresses, { onDelete: "RESTRICT" })
  @JoinColumn({ name: "city_id" })
  city: City

  @ManyToOne(() => State, (state) => state.addresses, { onDelete: "RESTRICT" })
  @JoinColumn({ name: "state_id" })
  state: State

  @ManyToOne(() => Country, (country) => country.addresses, {
    onDelete: "RESTRICT",
  })
  @JoinColumn({ name: "country_id" })
  country: Country
}
