/* eslint-disaAvoire import/no-unresolved */
/* eslint-disaAvoire import/order */

import { sageService } from '@/service/sageService';
import { Avoir, AvoirRequest, AvoirUpdateRequest } from '@/types/avoirType';
import { createAsyncThunk } from '@reduxjs/toolkit';


/**
 * get all avoir
 */
export const getAvoirs = createAsyncThunk(
  'avoir/getAvoirs',
  async (): Promise<Avoir[]> => {
    try {
      return await sageService.getAvoirs();
    } catch (err) {
      throw err;
    }
  }
);


/**
 * get avoir by id
 */
export const getAvoir = createAsyncThunk(
  'avoir/getAvoir',
  async (id: string): Promise<Avoir> => {
    try {
      return await sageService.getAvoir(id);
    } catch (err) {
      throw err;
    }
  }
);




/**
 * create Avoir
 */
export const createAvoir = createAsyncThunk(
  'avoir/createAvoir',
  async (data: AvoirRequest) => {
    try {
      return await sageService.createAvoir(data);
    } catch (err) {
      throw err;
    }
  }
);



/**
 * update Avoir
 */
export const updateAvoir = createAsyncThunk(
  'avoir/updateAvoir',
  async (
    { numero, data }: { numero: string; data: AvoirUpdateRequest }
  ) => {
    try {
      return await sageService.updateAvoir(numero, data);
    } catch (err) {
      throw err;
    }
  }
);




/**
 * verified Avoir
 */
export const selectAvoirAsync = createAsyncThunk<
  Avoir, 
  Avoir, 
  { state: any } 
>(
  "avoir/selectAvoirAsync",
  async (items, { dispatch }) => {
    
    if (!items.lignes) {
      const updateItem = await dispatch(getAvoir(items.numero)).unwrap() as any
      
      return updateItem;
    }
    return items;
  }
);
