import { keysMapping, requiredByProvider, skipKeys } from '../constants/constants';

const useValidateSettings = () => {
	const handleValidateSettings = (connection_settings, test, provider) => {
		const keys = Object.keys(connection_settings),
			errors = {};

		if (provider === 'TForce') {
            const required = ['client_id', 'client_secret'];
            if (!test) required.push('nickname');
            if (connection_settings.payment_type === 'thirdparty') required.push('payer_zip', 'payer_country_code');
            for (const key of required) {
                if (!String(connection_settings[key] || '').trim()) errors[key] = `${keysMapping[key] || key} is required.`;
            }
            for (const key of ['client_id', 'client_secret', 'username', 'password']) {
                if (String(connection_settings[key] || '').length > 100) errors[key] = `${keysMapping[key] || key} must be 100 characters or fewer.`;
            }
            return { settings: connection_settings, errors };
        }

		if (requiredByProvider[provider]) {
			const required = test ? requiredByProvider[provider] : ['nickname', ...requiredByProvider[provider]];

			for (const key of required) {
				if (!String(connection_settings[key] || '').trim()) {
					errors[key] = `${keysMapping[key] || key} is required.`;
				}
			}

			return { settings: connection_settings, errors };
		}

		for (const key of keys) {
			if (test && skipKeys.includes(key)) continue;
			else if (!test && key !== 'nickname' && skipKeys.includes(key)) continue;

			errors[key] = '';
			if (!connection_settings[key] || connection_settings[key] === '') {
				errors[key] = `${keysMapping[key] || key} is required.`;
			} else {
				delete errors[key];
			}
		}

		return { settings: connection_settings, errors };
	};

	return handleValidateSettings;
};

export default useValidateSettings;
