package com.sc.sicanet.migracion_sicanet.entity;

import java.sql.Date;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.UUID;

import jakarta.persistence.*;

@Entity
@Table(name = "cat_domicilio")
public class Domicilio {
    
    @Column(name = "fecha_control")
    private LocalDateTime fechaControl;

    @Column(name = "fecha_registro")
    private LocalDateTime fechaRegistro;

    @Column(name = "fecha_modificacion")
    private LocalDateTime fechaModificacion;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "pk_cat_domicilio")
    private int pkDomicilio;

    @Column(name = "tipo_vialidad")
    private String tipoVialidad;
    
    @Column(name = "calle")
    private String nombreVialidad;
    
    @Column(name = "num_exterior")
    private String numExterior;
    
    @Column(name = "num_interior")
    private String numInterior;
    
    @Column(name = "calle_izquierda")
    private String calleIzquierda;
    
    @Column(name = "calle_derecha")
    private String calleDerecha;

    @Column(name = "referencia")
    private String referencia;
    
    @Column(name = "tipo_casa")
    private String tipoCasa;
    
    @Column(name = "vive_desde")
    private LocalDate antiguedadDomicilio;

    @Column(name = "cp")
    private String cp;
    
    @Column(name = "tipo_asentamiento")
    private String tipoAsentamiento;
    
    @Column(name = "colonia")
    private String nombreAsentamiento;
    
    @Column(name = "tipo_domicilio")
    private String tipoDomicilio;

    @Column(name = "vive_con")
    private String viveCon;

    @Column(name = "vive_zona")
    private String viveZona;

    @Column(name = "tipo_vivienda")
    private String tipoVivienda;

    @Column(name = "principal")
    private String principal; // S Para saber si el domicilio es el principal

    @ManyToOne
    @JoinColumn(name = "fk_persona")
    private Persona persona;

    @OneToOne(mappedBy = "domicilio")
    private Laboral laboral;

    @Column(name = "fk_cat_usuario")
    private int fkCatUsuario;

    @Column(name = "dispositivo")
    private String dispositivo;

    @Column(name = "estatus")
    private String estatus;

    @Column(name = "sucursal")
    private int sucursal;

    @Column(name = "fk_cat_entidad")
    private int fkCatEntidad;

    @Column(name = "fk_cat_municipio")
    private int fkCatMunicipio;

    @Column(name = "fk_cat_localidad")
    private int fkCatLocalidad;

    @Column(name = "fk_pais")
    private int fkPais;

    private Double latitud;

    private Double longitud;

    private Double zoom;

    private String sujetoid;

    @Column(unique = true, nullable = false) // unico y obligatorio
    private String uuid;

    public Domicilio(){}

    public Domicilio(LocalDateTime fechaModificacion, String tipoVialidad,
                     String nombreVialidad, String numExterior, String numInterior, String calleIzquierda, String calleDerecha, String referencia,
                     String tipoCasa, LocalDate antiguedadDomicilio, String cp, String tipoAsentamiento, String nombreAsentamiento, String tipoDomicilio,
                     Double latitud, Double longitud, Double zoom, String viveCon, String viveZona, String tipoVivienda, String principal, int fkCatUsuario, String dispositivo,
                     String estatus, int sucursal, int fkCatEntidad, int fkCatMunicipio, int fkCatLocalidad, int fkPais, String sujetoid, String uuid) {

        this.fechaModificacion = fechaModificacion;
        this.tipoVialidad = tipoVialidad;
        this.nombreVialidad = nombreVialidad;
        this.numExterior = numExterior;
        this.numInterior = numInterior;
        this.calleIzquierda = calleIzquierda;
        this.calleDerecha = calleDerecha;
        this.referencia = referencia;
        this.tipoCasa = tipoCasa;
        this.antiguedadDomicilio = antiguedadDomicilio;
        this.cp = cp;
        this.tipoAsentamiento = tipoAsentamiento;
        this.nombreAsentamiento = nombreAsentamiento;
        this.tipoDomicilio = tipoDomicilio;
        this.viveCon = viveCon;
        this.viveZona = viveZona;
        this.tipoVivienda = tipoVivienda;
        this.principal = principal;
        this.fkCatUsuario = fkCatUsuario;
        this.dispositivo = dispositivo;
        this.estatus = estatus;
        this.sucursal = sucursal;
        this.fkCatEntidad = fkCatEntidad;
        this.fkCatMunicipio = fkCatMunicipio;
        this.fkCatLocalidad = fkCatLocalidad;
        this.fkPais = fkPais;
        this.sujetoid = sujetoid;
        this.latitud = latitud;
        this.longitud = longitud;
        this.zoom = zoom;
        this.uuid = uuid;
    }

    public LocalDateTime getFechaControl() {
        return fechaControl;
    }

    public void setFechaControl(LocalDateTime fechaControl) {
        this.fechaControl = fechaControl;
    }

    public LocalDateTime getFechaRegistro() {
        return fechaRegistro;
    }

    public void setFechaRegistro(LocalDateTime fechaRegistro) {
        this.fechaRegistro = fechaRegistro;
    }

    public LocalDateTime getFechaModificacion() {
        return fechaModificacion;
    }

    public void setFechaModificacion(LocalDateTime fechaModificacion) {
        this.fechaModificacion = fechaModificacion;
    }

    public int getPkDomicilio() {
        return pkDomicilio;
    }

    public void setPkDomicilio(int pkDomicilio) {
        this.pkDomicilio = pkDomicilio;
    }

    public String getTipoVialidad() {
        return tipoVialidad;
    }

    public void setTipoVialidad(String tipoVialidad) {
        this.tipoVialidad = tipoVialidad;
    }

    public String getNombreVialidad() {
        return nombreVialidad;
    }

    public void setNombreVialidad(String nombreVialidad) {
        this.nombreVialidad = nombreVialidad;
    }

    public String getNumExterior() {
        return numExterior;
    }

    public void setNumExterior(String numExterior) {
        this.numExterior = numExterior;
    }

    public String getNumInterior() {
        return numInterior;
    }

    public void setNumInterior(String numInterior) {
        this.numInterior = numInterior;
    }

    public String getCalleIzquierda() {
        return calleIzquierda;
    }

    public void setCalleIzquierda(String calleIzquierda) {
        this.calleIzquierda = calleIzquierda;
    }

    public String getCalleDerecha() {
        return calleDerecha;
    }

    public void setCalleDerecha(String calleDerecha) {
        this.calleDerecha = calleDerecha;
    }

    public String getReferencia() {
        return referencia;
    }

    public void setReferencia(String referencia) {
        this.referencia = referencia;
    }

    public String getTipoCasa() {
        return tipoCasa;
    }

    public void setTipoCasa(String tipoCasa) {
        this.tipoCasa = tipoCasa;
    }

    public LocalDate getAntiguedadDomicilio() {
        return antiguedadDomicilio;
    }

    public void setAntiguedadDomicilio(LocalDate antiguedadDomicilio) {
        this.antiguedadDomicilio = antiguedadDomicilio;
    }

    public String getCp() {
        return cp;
    }

    public void setCp(String cp) {
        this.cp = cp;
    }

    public String getTipoAsentamiento() {
        return tipoAsentamiento;
    }

    public void setTipoAsentamiento(String tipoAsentamiento) {
        this.tipoAsentamiento = tipoAsentamiento;
    }

    public String getNombreAsentamiento() {
        return nombreAsentamiento;
    }

    public void setNombreAsentamiento(String nombreAsentamiento) {
        this.nombreAsentamiento = nombreAsentamiento;
    }

    public String getTipoDomicilio() {
        return tipoDomicilio;
    }

    public void setTipoDomicilio(String tipoDomicilio) {
        this.tipoDomicilio = tipoDomicilio;
    }

    public String getViveCon() {
        return viveCon;
    }

    public void setViveCon(String viveCon) {
        this.viveCon = viveCon;
    }

    public String getViveZona() {
        return viveZona;
    }

    public void setViveZona(String viveZona) {
        this.viveZona = viveZona;
    }

    public String getTipoVivienda() {
        return tipoVivienda;
    }

    public void setTipoVivienda(String tipoVivienda) {
        this.tipoVivienda = tipoVivienda;
    }

    public String getPrincipal() {
        return principal;
    }

    public void setPrincipal(String principal) {
        this.principal = principal;
    }

    public Persona getPersona() {
        return persona;
    }

    public void setPersona(Persona persona) {
        this.persona = persona;
    }

    public int getFkCatUsuario() {
        return fkCatUsuario;
    }

    public void setFkCatUsuario(int fkCatUsuario) {
        this.fkCatUsuario = fkCatUsuario;
    }

    public String getDispositivo() {
        return dispositivo;
    }

    public void setDispositivo(String dispositivo) {
        this.dispositivo = dispositivo;
    }

    public String getEstatus() {
        return estatus;
    }

    public void setEstatus(String estatus) {
        this.estatus = estatus;
    }

    public int getSucursal() {
        return sucursal;
    }

    public void setSucursal(int sucursal) {
        this.sucursal = sucursal;
    }

    public int getFkCatEntidad() {
        return fkCatEntidad;
    }

    public void setFkCatEntidad(int fkCatEntidad) {
        this.fkCatEntidad = fkCatEntidad;
    }

    public int getFkCatMunicipio() {
        return fkCatMunicipio;
    }

    public void setFkCatMunicipio(int fkCatMunicipio) {
        this.fkCatMunicipio = fkCatMunicipio;
    }

    public int getFkCatLocalidad() {
        return fkCatLocalidad;
    }

    public void setFkCatLocalidad(int fkCatLocalidad) {
        this.fkCatLocalidad = fkCatLocalidad;
    }

    public int getFkPais() {
        return fkPais;
    }

    public void setFkPais(int fkPais) {
        this.fkPais = fkPais;
    }

    public String getSujetoid() {
        return sujetoid;
    }

    public void setSujetoid(String sujetoid) {
        this.sujetoid = sujetoid;
    }

    public Double getLatitud() { return latitud;}

    public void setLatitud(Double latitud) { this.latitud = latitud;}

    public Double getLongitud() { return longitud;}

    public void setLongitud(Double longitud) { this.longitud = longitud;}

    public Double getZoom() { return zoom;}

    public void setZoom(Double zoom) { this.zoom = zoom;}

    public Laboral getLaboral() { return laboral;}

    public void setLaboral(Laboral laboral) { this.laboral = laboral;}

    public String getUuid() {
        return uuid;
    }

    public void setUuid(String uuid) {
        this.uuid = uuid;
    }
}
