import { GsbEntityService, GsbSaveRequest } from '@gsb-core/core';

const gsbEntityService = new GsbEntityService();

export const gsbEntityTools = {
    getById: async ({ definitionType, id, token, tenantCode }: { definitionType: string; id: string; token?: string; tenantCode?: string }) => {
        try {
            const result = await gsbEntityService.getById(definitionType, id, token, tenantCode);
            return {
                ...result,
                success: true
            }
        } catch (error: any) {
            return {
                ...error,
                success: false
            }
        }
    },

    getCopy: async ({ request, token, tenantCode }: { request: any; token?: string; tenantCode?: string }) => {
        try {
            const result = await gsbEntityService.getCopy(request, token, tenantCode);
            return {
                ...result,
                success: true
            }
        } catch (error: any) {
            return {
                ...error,
                success: false
            }
        }
    },

    query: async ({ queryParams, token, tenantCode }: { queryParams: any; token?: string; tenantCode?: string }) => {
        try {
            const result = await gsbEntityService.query(queryParams, token, tenantCode);
            return {
                ...result,
                success: true
            }
        } catch (error: any) {
            return {
                ...error,
                success: false
            }
        }
    },

    queryMapped: async ({ queryParams, token, tenantCode }: { queryParams: any; token?: string; tenantCode?: string }) => {
        try {
            const result = await gsbEntityService.queryMapped(queryParams, token, tenantCode);
            return { success: true, data: result.entities };
        } catch (error: any) {
            console.log(error);
            return {
                ...error,
                success: false
            }
        }
    },

    save: async ({ request, token, tenantCode }: { request: GsbSaveRequest; token?: string; tenantCode?: string }) => {
        try {
            const result = await gsbEntityService.save(request, token, tenantCode);
            return {
                ...result,
                success: true
            }
        } catch (error: any) {
            return {
                ...error,
                success: false
            }
        }
    },

    saveMulti: async ({ request, token, tenantCode }: { request: any; token?: string; tenantCode?: string }) => {
        try {
            const result = await gsbEntityService.saveMulti(request, token, tenantCode);
            return {
                ...result,
                success: true
            }
        } catch (error: any) {
            return {
                ...error,
                success: false
            }
        }
    },

    delete: async ({ request, token, tenantCode }: { request: any; token?: string; tenantCode?: string }) => {
        try {
            const result = await gsbEntityService.delete(request, token, tenantCode);
            return { success: true, data: result };
        } catch (error: any) {
            return {
                ...error,
                success: false
            }
        }
    },

    deleteQuery: async ({ queryParams, token, tenantCode }: { queryParams: any; token?: string; tenantCode?: string }) => {
        try {
            const result = await gsbEntityService.deleteQuery(queryParams, token, tenantCode);
            return {
                ...result,
                success: true
            }
        } catch (error: any) {
            return {
                ...error,
                success: false
            }
        }
    },

    saveMappedItems: async ({ request, token, tenantCode }: { request: any; token?: string; tenantCode?: string }) => {
        try {
            const result = await gsbEntityService.saveMappedItems(request, token, tenantCode);
            return {
                ...result,
                success: true
            }
        } catch (error: any) {
            return {
                ...error,
                success: false
            }
        }
    },

    removeMappedItems: async ({ request, token, tenantCode }: { request: any; token?: string; tenantCode?: string }) => {
        try {
            const result = await gsbEntityService.removeMappedItems(request, token, tenantCode);
            return {
                ...result,
                success: true
            }
        } catch (error: any) {
            return {
                ...error,
                success: false
            }
        }
    },

    runWorkflow: async ({ request, token, tenantCode }: { request: any; token?: string; tenantCode?: string }) => {
        try {
            const result = await gsbEntityService.runWorkflow(request, token, tenantCode);
            return {
                ...result,
                success: true
            }
        } catch (error: any) {
            return {
                ...error,
                success: false
            }
        }
    },

    startWorkflow: async ({ request, token, tenantCode }: { request: any; token?: string; tenantCode?: string }) => {
        try {
            const result = await gsbEntityService.startWorkflow(request, token, tenantCode);
            return {
                ...result,
                success: true
            }
        } catch (error: any) {
            return {
                ...error,
                success: false
            }
        }
    },

    runWfFunction: async ({ request, token, tenantCode }: { request: any; token?: string; tenantCode?: string }) => {
        try {
            const result = await gsbEntityService.runWfFunction(request, token, tenantCode);
            return {
                ...result,
                success: true
            }
        } catch (error: any) {
            return {
                ...error,
                success: false
            }
        }
    },

    testWfFunction: async ({ request, token, tenantCode }: { request: any; token?: string; tenantCode?: string }) => {
        try {
            const result = await gsbEntityService.testWfFunction(request, token, tenantCode);
            return {
                ...result,
                success: true
            }
        } catch (error: any) {
            return {
                ...error,
                success: false
            }
        }
    },


    iterateTask: async ({ request, token, tenantCode }: { request: any; token?: string; tenantCode?: string }) => {
        try {
            const result = await gsbEntityService.iterateTask(request, token, tenantCode);
            return {
                ...result,
                success: true
            }
        } catch (error: any) {
            return {
                ...error,
                success: false
            }
        }
    }
}; 