package com.sc.sicanet.migracion_sicanet.entity;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

import jakarta.persistence.*;

@Entity
@Table(name = "cat_personas")
public class Persona {
    
    @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_persona")
    private int pkPersona;
    
    @Column(name = "tipoPersona")
    private String tipoPersona;
    
    private String nombre;
    
    @Column(name = "apaterno")
    private String apellidoPaterno;
    
    @Column(name = "amaterno")
    private String apellidoMaterno;
    
    @Column(name = "entidad_nacimiento")
    private int entidadNacimiento;
    
    @Column(name = "lugar_nacimiento")
    private String lugarNacimiento;
    
    @Column(name = "fecha_nacimiento", nullable = false)
    private LocalDate fechaNacimiento;
    
    private String sexo;
    private String rfc;
    private String curp;
    
    @Column(name = "estado_civil")
    private String estadoCivil;

    @Column(name = "actividad")
    private String actividad; // actividad empresarial
    
    @Column(name = "num_dependientes")
    private int numeroDependientes;
    
    @Column(name = "tipo_identificacion")
    private String tipoIdentificacion;
    
    @Column(name = "folio_identificacion")
    private String folioIdentificacion;
    
    @Column(name = "clave_elector")
    private String claveElector;
    
    @Column(name = "nivel_estudios")
    private String nivelEstudios;
    
    @Column(name = "fk_pais_nacimiento")
    private int fkPaisNacimiento;
    
    @Column(name = "fk_pais_nacionalidad")
    private int fkPaisNacionalidad;

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

    private String dispositivo;
    private String estatus;
    private int sucursal;

   @OneToOne(mappedBy = "persona")
   private Socio socio;

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

   @OneToMany(mappedBy = "persona")
   private List<Domicilio> domicilio;

   @OneToMany(mappedBy = "persona")
   private List<PerfilTransaccional> perfilTransaccional;

   @OneToMany(mappedBy = "persona")
   private List<InformacionPEPS> informacionPEPS;

   @OneToOne(mappedBy = "persona")
   private  RepresentanteLegal representado;

   @OneToMany(mappedBy = "persona")
   private List<CatContacto> catContacto;

   @OneToOne(mappedBy = "representante")
   private RepresentanteLegal representanteLegal;

    public Persona() {}

    public Persona(LocalDateTime fechaModificacion, String tipoPersona,
                   String nombre, String apellidoPaterno, String apellidoMaterno, int entidadNacimiento, String lugarNacimiento,
                   LocalDate fechaNacimiento, String sexo, String rfc, String curp, String estadoCivil, String actividad,
                   int numeroDependientes, String tipoIdentificacion, String folioIdentificacion, String claveElector,
                   String nivelEstudios, int fkPaisNacimiento, int fkPaisNacionalidad, int fkCatUsuario, String dispositivo,
                   String estatus, int sucursal) {
        this.fechaModificacion = fechaModificacion;
        this.tipoPersona = tipoPersona;
        this.nombre = nombre;
        this.apellidoPaterno = apellidoPaterno;
        this.apellidoMaterno = apellidoMaterno;
        this.entidadNacimiento = entidadNacimiento;
        this.lugarNacimiento = lugarNacimiento;
        this.fechaNacimiento = fechaNacimiento;
        this.sexo = sexo;
        this.rfc = rfc;
        this.curp = curp;
        this.estadoCivil = estadoCivil;
        this.actividad = actividad;
        this.numeroDependientes = numeroDependientes;
        this.tipoIdentificacion = tipoIdentificacion;
        this.folioIdentificacion = folioIdentificacion;
        this.claveElector = claveElector;
        this.nivelEstudios = nivelEstudios;
        this.fkPaisNacimiento = fkPaisNacimiento;
        this.fkPaisNacionalidad = fkPaisNacionalidad;
        this.fkCatUsuario = fkCatUsuario;
        this.dispositivo = dispositivo;
        this.estatus = estatus;
        this.sucursal = sucursal;
    }

    public String getTipoPersona() {
        return tipoPersona;
    }

    public void setTipoPersona(String tipoPersona) {
        this.tipoPersona = tipoPersona;
    }

    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 getPkPersona() {
        return pkPersona;
    }
    
    public void setPkPersona(int pkPersona) {
        this.pkPersona = pkPersona;
    }

    public String getNombre() {
        return nombre;
    }
    
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
    
    public String getApellidoPaterno() {
        return apellidoPaterno;
    }
    
    public void setApellidoPaterno(String apellidoPaterno) {
        this.apellidoPaterno = apellidoPaterno;
    }
    
    public String getApellidoMaterno() {
        return apellidoMaterno;
    }
    
    public void setApellidoMaterno(String apellidoMaterno) {
        this.apellidoMaterno = apellidoMaterno;
    }
    
    public int getEntidadNacimiento() {
        return entidadNacimiento;
    }
    
    public void setEntidadNacimiento(int entidadNacimiento) {
        this.entidadNacimiento = entidadNacimiento;
    }
    
    public String getLugarNacimiento() {
        return lugarNacimiento;
    }
    
    public void setLugarNacimiento(String lugarNacimiento) {
        this.lugarNacimiento = lugarNacimiento;
    }
    
    public LocalDate getFechaNacimiento() {
        return fechaNacimiento;
    }
    
    public void setFechaNacimiento(LocalDate fechaNacimiento) {
        this.fechaNacimiento = fechaNacimiento;
    }
    
    public String getSexo() {
        return sexo;
    }
    
    public void setSexo(String sexo) {
        this.sexo = sexo;
    }
    
    public String getRfc() {
        return rfc;
    }
    
    public void setRfc(String rfc) {
        this.rfc = rfc;
    }
    
    public String getCurp() {
        return curp;
    }
    
    public void setCurp(String curp) {
        this.curp = curp;
    }
    
    public String getEstadoCivil() {
        return estadoCivil;
    }
    
    public void setEstadoCivil(String estadoCivil) {
        this.estadoCivil = estadoCivil;
    }
    
    public String getActividad() {
        return actividad;
    }
    
    public void setActividad(String actividad) {
        this.actividad = actividad;
    }
    
    public int getNumeroDependientes() {
        return numeroDependientes;
    }
    
    public void setNumeroDependientes(int numeroDependientes) {
        this.numeroDependientes = numeroDependientes;
    }
    
    public String getTipoIdentificacion() {
        return tipoIdentificacion;
    }
    
    public void setTipoIdentificacion(String tipoIdentificacion) {
        this.tipoIdentificacion = tipoIdentificacion;
    }
    
    public String getFolioIdentificacion() {
        return folioIdentificacion;
    }
    
    public void setFolioIdentificacion(String folioIdentificacion) {
        this.folioIdentificacion = folioIdentificacion;
    }
    
    public String getClaveElector() {
        return claveElector;
    }
    
    public void setClaveElector(String claveElector) {
        this.claveElector = claveElector;
    }
    
    public String getNivelEstudios() {
        return nivelEstudios;
    }
    
    public void setNivelEstudios(String nivelEstudios) {
        this.nivelEstudios = nivelEstudios;
    }
    
    public int getFkPaisNacimiento() {
        return fkPaisNacimiento;
    }
    
    public void setFkPaisNacimiento(int fkPaisNacimiento) {
        this.fkPaisNacimiento = fkPaisNacimiento;
    }
    
    public int getFkPaisNacionalidad() {
        return fkPaisNacionalidad;
    }
    
    public void setFkPaisNacionalidad(int fkPaisNacionalidad) {
        this.fkPaisNacionalidad = fkPaisNacionalidad;
    }
    
    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;
    }

}
