/* eslint-disable no-shadow */
import React, { useContext, useState } from 'react';
import { BLOCK_CONTEXT } from '@rocket.chat/ui-kit';

export const textParser = ([{ text }]) => text;

export const defaultContext = {
	action: (...args) => console.log(args),
	state: console.log,
	appId: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz',
	errors: {}
};

export const KitContext = React.createContext(defaultContext);

export const useBlockContext = ({
	blockId, actionId, appId, initialValue
}, context) => {
	const {
		action, appId: appIdFromContext, viewId, state, language, errors, values = {}
	} = useContext(KitContext);
	const { value = initialValue } = values[actionId] || {};
	const [loading, setLoading] = useState(false);

	const error = errors && actionId && errors[actionId];

	if ([BLOCK_CONTEXT.SECTION, BLOCK_CONTEXT.ACTION].includes(context)) {
		return [{
			loading, setLoading, error, value, language
		}, async({ value }) => {
			setLoading(true);
			try {
				await action({
					blockId,
					appId: appId || appIdFromContext,
					actionId,
					value,
					viewId
				});
			} catch (e) {
				// do nothing
			}
			setLoading(false);
		}];
	}

	return [{
		loading, setLoading, value, error, language
	}, async({ value }) => {
		setLoading(true);
		try {
			await state({
				blockId,
				appId,
				actionId,
				value
			});
		} catch (e) {
			// do nothing
		}
		setLoading(false);
	}];
};