/**
 * Datart
 *
 * Copyright 2021
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import { useCallback, useEffect, useState } from 'react';

interface UseSplitSizesProps {
  limitedSide: 0 | 1;
  range: [number, number];
}

export function useSplitSizes({ limitedSide, range }: UseSplitSizesProps) {
  const [sizes, setSizes] = useState([0, 0]);
  const [minSize] = range;

  const onResize = useCallback(() => {
    const minPct = Math.floor(
      (minSize / document.documentElement.clientWidth) * 100,
    );
    const pct = Math.max(minPct, sizes[0]);
    if (pct !== sizes[0]) {
      setSizes([pct, 100 - pct]);
    }
  }, [sizes, minSize]);

  useEffect(() => {
    onResize();
    window.addEventListener('resize', onResize, false);
    return () => {
      window.removeEventListener('resize', onResize);
    };
  }, [onResize]);

  return { sizes, setSizes };
}
