import { Id } from '@win2win/shared';
import { useFetch } from '@win2win/shared-ui';
import { pick } from 'lodash';
import { computed } from 'vue';
import { useRoute } from 'vue-router';
import { ItemLiquidado, LiquidacionRaw, roles } from '../models';

export function useFetchLiquidacion(_id?: Id | null) {
  const route = useRoute();
  const id = computed(() => {
    if (_id) return _id;
    const id = route.params.ID_LIQUIDACION;
    return id ? Number(id) : null;
  });
  const queryKeys = computed(() => ['liquidacion', id.value, 'detalle']);
  const path = computed(() => `/liquidaciones/${id.value}`);
  const { data, fetching } = useFetch<LiquidacionRaw>(queryKeys, path);

  const items = computed<ItemLiquidado[]>(() => {
    const liquidacion = data.value;
    if (!liquidacion) return [];
    const _items = liquidacion!.ITEMS.map(
      (item) =>
        ({
          ID_CAPTACION: item.CAPTACION?.ID_CAPTACION ?? null,
          pedido: item.PEDIDO,
          gerencia: liquidacion.GERENCIA,
          gerente: liquidacion.GERENTE,
          delegacion: liquidacion.DELEGACION,
          organizador: liquidacion.ORGANIZADOR,
          situacion: liquidacion.SITUACION,
          captador: item.R_PROMOTOR || {},
          comision_calculada: { ...pick(item, roles) },
          confirmacion_captador: !!item.FECHA_CONFIRMADO,
          confirmacion_gerente: !!liquidacion.FECHA_LIQUIDADO,
        } as ItemLiquidado)
    );
    return _items;
  });

  return { data, id, fetching, items };
}
