import { constants, utils } from '@spglobal/ca-mfe-package-utils';
import { endpoints } from '@root/constants/endpoints';
import { createApi } from '@reduxjs/toolkit/query/react';
import { getDataSourceHeader } from '@root/utils/common';

export const companyInformationApi = createApi({
    reducerPath: 'companyInformationApi',
    baseQuery: utils.serviceLayerAPI.fetchBaseQuery({
        baseUrl: constants.endpoints.SERVICEHOST
    }),
    endpoints: builder => ({
        getCompanyData: builder.mutation({
            query: ({ datasource, ...data }) => utils.serviceLayerAPI.reduxPost(endpoints.COMPANY_DATA_API, data,
                getDataSourceHeader(datasource))
        }),
        getEpdState: builder.mutation({
            query: ({ datasource, ...data }) => utils.serviceLayerAPI.reduxPost(endpoints.EPD_STATE_API, data,
                getDataSourceHeader(datasource))
        }),
        pitMsAdjSingleScore: builder.mutation({
            query: ({ datasource, ...data }) => utils.serviceLayerAPI.reduxPost(endpoints.PIT_MS_ADJ_SINGLE_SCORE, data,
                getDataSourceHeader(datasource))
        }),
        riskGaugeValidate: builder.mutation({
            query: ({ datasource, ...data }) => utils.serviceLayerAPI.reduxPost(endpoints.COMPANY_MODEL_LOOKUP_API, data,
                getDataSourceHeader(datasource))
        }),
        propUpload: builder.mutation({
            query: ({ datasource, ...data }) => utils.serviceLayerAPI.reduxPost(endpoints.PROP_UPLOAD, data,
                getDataSourceHeader(datasource))
        }),
        epdExpectedPDS: builder.mutation({
            query: ({ datasource, ...data }) => utils.serviceLayerAPI.reduxPost(endpoints.EXPECTED_PDS, data,
                getDataSourceHeader(datasource))
        }),
        getCompanyDetailMetaData: builder.mutation({
            query: (year = '') => `${endpoints.COMPANY_DETAIL_METADATA_API}${year && '?year=' + year}`,
            transformResponse: response => response,
            transformErrorResponse: response => response.status
        }),
        getFinancialStatementDate: builder.mutation({
            query: ({ datasource, ...data }) => utils.serviceLayerAPI.reduxPost(endpoints.GENERATE_FINANCIAL_STATEMENT_DATE,
                data, getDataSourceHeader(datasource))
        })
    })
});

export const {
    useGetCompanyDataMutation,
    useGetEpdStateMutation,
    usePitMsAdjSingleScoreMutation,
    useRiskGaugeValidateMutation,
    usePropUploadMutation,
    useEpdExpectedPDSMutation,
    useGetCompanyDetailMetaDataMutation,
    useGetFinancialStatementDateMutation
} = companyInformationApi;
