import { getChannelValue } from ".";
import { defaultChannelParams } from "../constants";
import { ShadeOption } from "../types";

export default function getBoundSteps(HSLInput: { [key: string]: number }, inputShadeOption: ShadeOption, shadeFactor: number) {
    const hslArray: string[] = ["h", "s", "l"];
    let hslArrayIndex: number = 0;
  
    inputShadeOption.channelParams?.forEach((channelParam) => {
      for (const [key, value] of Object.entries(channelParam)) {
        if (hslArray[hslArrayIndex] === value) {
          // use default bounds
          if (!channelParam.useBounds) {
            const mergedChannelParams = Object.assign(defaultChannelParams, channelParam);
            HSLInput[hslArray[hslArrayIndex]] = getChannelValue({
              shadeFactor,
              HSL_channel: HSLInput[hslArray[hslArrayIndex]],
              HSL_letter: hslArray[hslArrayIndex],
              workingObj: mergedChannelParams,
            });
          }
  
          // use custom bounds
          if (channelParam.useBounds) {
            HSLInput[hslArray[hslArrayIndex]] = getChannelValue({
              shadeFactor,
              HSL_channel: HSLInput[hslArray[hslArrayIndex]],
              HSL_letter: hslArray[hslArrayIndex],
              workingObj: defaultChannelParams,
            });
          }
        }
      }
      hslArrayIndex++;
    });
  
    return HSLInput;
  }