import {
  Column,
  Entity,
  JoinColumn,
  ManyToOne,
  OneToMany,
  PrimaryGeneratedColumn,
} from 'typeorm';
import {
  Adscripcion,
  Estado,
  Laboratorio,
  Marca,
  Periferico,
  Procesador,
  Proyecto,
  SistemaOperativo,
  TipoEquipo,
  Uso,
} from './catalogo.entities';
import { Movimiento } from 'src/movimiento/entities/movimiento.entity';

@Entity()
export class Equipo {
  @PrimaryGeneratedColumn()
  id_equipo: number;
  //checar bien aqui si estoy bien

  @Column({ type: 'varchar', length: 10, nullable: true })
  inventario: string;

  @Column({ type: 'varchar', length: 30, nullable: true })
  serie: string;

  @Column({ type: 'varchar', length: 200, nullable: true })
  lugar: string;

  @Column({ name: 'fecha_factura' })
  fechaFactura: Date;

  @Column({ type: 'varchar', length: 30, nullable: true })
  antiguedad: string;

  @Column({ type: 'varchar', length: 40, nullable: true })
  modelo: string;

  //Relaciones
  @OneToMany(() => Movimiento, (mov) => mov.equipo)
  mov: Movimiento[];

  @JoinColumn({ name: 'id_estado' })
  @ManyToOne(() => Estado, (estado) => estado.equipo)
  estado: Estado;

  @JoinColumn({ name: 'id_adscripcion' })
  @ManyToOne(() => Adscripcion, (adscripcion) => adscripcion.equipo)
  adscripcion: Adscripcion;

  @JoinColumn({ name: 'id_sistema_operativo' })
  @ManyToOne(
    () => SistemaOperativo,
    (sistemaOperativo) => sistemaOperativo.equipo,
  )
  sistemaOperativo: SistemaOperativo;

  @JoinColumn({ name: 'id_tipo_equipo' })
  @ManyToOne(() => TipoEquipo, (tipoEquipo) => tipoEquipo.equipo)
  tipoEquipo: TipoEquipo;

  @JoinColumn({ name: 'id_procesador' })
  @ManyToOne(() => Procesador, (procesador) => procesador.equipo, {
    nullable: true,
    onDelete: 'SET NULL',
  })
  procesador: Procesador;

  @JoinColumn({ name: 'id_uso' })
  @ManyToOne(() => Uso, (tipoUso) => tipoUso.equipo)
  tipoUso: Uso;

  @JoinColumn({ name: 'id_marca' })
  @ManyToOne(() => Marca, (marca) => marca.equipo)
  marca: Marca;

  @JoinColumn({ name: 'id_periferico' })
  @ManyToOne(() => Periferico, (Periferico) => Periferico.equipo)
  periferico: Periferico;

  @JoinColumn({ name: 'id_laboratorio' })
  @ManyToOne(() => Laboratorio, (laboratorio) => laboratorio.equipo, {
    nullable: true,
  })
  laboratorio?: Laboratorio | null;

  @JoinColumn({ name: 'id_proyecto' })
  @ManyToOne(() => Proyecto, (proyecto) => proyecto.equipo, {
    nullable: true,
  })
  proyecto?: Proyecto | null;
}
