import { obtenerNombreModulo } from "../../../../assets/js/app/funcionesGenerales.js";
import metodosFetch from "../../../../assets/js/app/metodosFetch.js";

class MovimientoEmpleado {
  constructor({
    coddepartamento,
    codempleado,
    codproyecto,
    codproyectoMovimiento,
    codpuesto,
    codsucursal,
    codsucursalMovimiento,
    codtipoplanilla,
    comentarios,
    fechaEfectiva,
    fechaRegistro,
    fechaRetorno,
    id,
    idOficina,
    idTipoMovimiento,
    nombreArchivoFoto,
    nombreCompleto,
    nombreOficina,
    nombreProyecto,
    nombreProyectoMovimiento,
    nombreSucursal,
    nombreSucursalMovimiento,
    seguimiento = null,
    tipoMovimiento,
    usuario,
  }) {
    this.coddepartamento = coddepartamento;
    this.codempleado = codempleado;
    this.codproyecto = codproyecto;
    this.codproyectoMovimiento = codproyectoMovimiento;
    this.codpuesto = codpuesto;
    this.codsucursal = codsucursal;
    this.codsucursalMovimiento = codsucursalMovimiento;
    this.codtipoplanilla = codtipoplanilla;
    this.comentarios = comentarios;
    this.fechaEfectiva = fechaEfectiva;
    this.fechaRegistro = fechaRegistro;
    this.fechaRetorno = fechaRetorno;
    this.id = id;
    this.idOficina = idOficina;
    this.idTipoMovimiento = idTipoMovimiento;
    this.nombreArchivoFoto = nombreArchivoFoto;
    this.nombreCompleto = nombreCompleto;
    this.nombreOficina = nombreOficina;
    this.nombreProyecto = nombreProyecto;
    this.nombreProyectoMovimiento = nombreProyectoMovimiento;
    this.nombreSucursal = nombreSucursal;
    this.nombreSucursalMovimiento = nombreSucursalMovimiento;
    this.seguimiento = seguimiento;
    this.tipoMovimiento = tipoMovimiento;
    this.usuario = usuario;
  }

  static async obtenerTodos() {
    try {
      const response = await metodosFetch.get({
        archivo: "controllers/movimientoEmpleadoController",
        modulo: obtenerNombreModulo(),
        parametros: {
          accion: "obtenerTodos",
        },
      });

      return response;
    } catch (err) {
      throw err;
    }
  }

  static async obtenerPorTipoPlanilla({ codtipoplanilla }) {
    try {
      const respuesta = await metodosFetch.get({
        archivo: "controllers/movimientoEmpleadoController",
        modulo: obtenerNombreModulo(),
        parametros: {
          accion: "obtenerPorTipoPlanilla",
          codtipoplanilla,
        },
      });

      return respuesta;
    } catch (err) {
      throw err;
    }
  }

  async guardar() {
    try {
      const response = await metodosFetch.post({
        archivo: "controllers/movimientoEmpleadoController",
        modulo: obtenerNombreModulo(),
        data: {
          accion: "guardar",
          ...this,
        },
      });

      return response;
    } catch (err) {
      throw err;
    }
  }

  async eliminar() {
    try {
      const respuesta = await metodosFetch.post({
        archivo: "controllers/movimientoEmpleadoController",
        modulo: obtenerNombreModulo(),
        data: {
          accion: "eliminar",
          id: this.id,
        },
      });

      return respuesta;
    } catch (err) {
      throw err;
    }
  }

  async finalizar() {
    try {
      const respuesta = await metodosFetch.post({
        archivo: "controllers/movimientoEmpleadoController",
        modulo: obtenerNombreModulo(),
        data: {
          accion: "finalizar",
          id: this.id,
        },
      });

      return respuesta;
    } catch (err) {
      throw err;
    }
  }
}

export default MovimientoEmpleado;
