import { Hypermedia, HypermediaAction } from 'first-npm-package-nicule/core';

type OptionSelectFunction = (option: { name: string; value: any; isDisabled: boolean; }, hypermedia: Hypermedia) => boolean;

export function selectOption(fieldName: string, optionSelectFunction: OptionSelectFunction): (hypermediaAction: HypermediaAction, hypermedia: Hypermedia) => HypermediaAction {
    return ({ fields, ...rest }: HypermediaAction, hypermedia: Hypermedia) => {
        fields = fields.map(({ value, options, ...restField }) => {
            if (options) {
                options.forEach(fieldOption => {
                    if (optionSelectFunction(fieldOption, hypermedia)) {
                        value = fieldOption.value;
                    }
                });
            }

            return {
                value, options,
                ...restField
            };
        });

        return { ...rest, fields };
    };
}
