/*
 * Copyright 2024 Palantir Technologies, Inc. All rights reserved.
 * 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 * as React from "react";
import type { SVGIconProps } from "../../svgIconProps";
import { IconSize } from "../../iconTypes";
import { SVGIconContainer } from "../../svgIconContainer";

/** Path data for the 16px grid; matches {@link generate-icon-paths.mjs} / `<Icon />` from core. */
const PATHS_16 = ["M8 0q-.53 0-1.044.068a1 1 0 1 0 .26 1.983 6 6 0 0 1 1.569 0A1 1 0 0 0 9.044.068 8 8 0 0 0 8 0M4.348 3.24a1 1 0 1 0-1.219-1.587A8 8 0 0 0 1.653 3.13 1 1 0 0 0 3.24 4.348c.32-.416.693-.79 1.109-1.109m8.523-1.587a1 1 0 1 0-1.219 1.586c.416.32.79.693 1.109 1.109a1 1 0 1 0 1.586-1.219 8 8 0 0 0-1.476-1.476m3.061 5.303a1 1 0 1 0-1.983.26 6 6 0 0 1 0 1.569 1 1 0 0 0 1.983.259 8 8 0 0 0 0-2.088m-13.881.26a1 1 0 0 0-1.983-.26 8 8 0 0 0 0 2.088 1 1 0 1 0 1.983-.26 6 6 0 0 1 0-1.569M3.24 11.65a1 1 0 1 0-1.586 1.219 8 8 0 0 0 1.476 1.476 1 1 0 0 0 1.219-1.586A6 6 0 0 1 3.24 11.65m11.108 1.219a1 1 0 0 0-1.586-1.219c-.32.416-.693.79-1.109 1.109a1 1 0 1 0 1.219 1.586 8 8 0 0 0 1.476-1.476M9.045 15.93a1 1 0 1 0-.26-1.983 6 6 0 0 1-1.569 0 1 1 0 0 0-.259 1.983 8 8 0 0 0 2.088 0M8 6a2 2 0 1 1 0 4 2 2 0 0 1 0-4m4 2a4 4 0 1 0-8 0 4 4 0 0 0 8 0"] as readonly string[];

/** Path data for the 20px grid; matches {@link generate-icon-paths.mjs} / `<Icon />` from core. */
const PATHS_20 = ["M10 0q-.663 0-1.305.084a1 1 0 0 0 .259 1.984 8 8 0 0 1 2.092 0 1 1 0 0 0 .259-1.984A10 10 0 0 0 10 0M5.13 3.652a1 1 0 1 0-1.218-1.586 10 10 0 0 0-1.846 1.846A1 1 0 1 0 3.652 5.13 8 8 0 0 1 5.13 3.652m10.958-1.586a1 1 0 0 0-1.218 1.586 8 8 0 0 1 1.478 1.478 1 1 0 1 0 1.585-1.218 10 10 0 0 0-1.845-1.846M2.068 8.954a1 1 0 1 0-1.984-.259 10 10 0 0 0 0 2.61 1 1 0 1 0 1.984-.259 8 8 0 0 1 0-2.092m17.848-.259a1 1 0 1 0-1.984.259 8 8 0 0 1 0 2.092 1 1 0 0 0 1.984.259 10 10 0 0 0 0-2.61M3.652 14.87a1 1 0 0 0-1.586 1.218 10 10 0 0 0 1.846 1.845 1 1 0 0 0 1.218-1.585 8 8 0 0 1-1.478-1.478m14.281 1.218a1 1 0 0 0-1.585-1.218 8 8 0 0 1-1.478 1.478 1 1 0 1 0 1.218 1.585 10 10 0 0 0 1.845-1.845m-8.98 1.844a1 1 0 0 0-.258 1.984 10 10 0 0 0 2.61 0 1 1 0 1 0-.259-1.984 8 8 0 0 1-2.092 0M10 7a3 3 0 1 1 0 6 3 3 0 0 1 0-6m5 3a5 5 0 1 0-10 0 5 5 0 0 0 10 0"] as readonly string[];

export const RangeRing: React.FC<SVGIconProps> = React.forwardRef<any, SVGIconProps>((props, ref) => {
    const isLarge = (props.size ?? IconSize.STANDARD) >= IconSize.LARGE;
    const paths = isLarge ? PATHS_20 : PATHS_16;
    return (
        <SVGIconContainer iconName="range-ring" ref={ref} {...props}>
            {paths.map((d, i) => (
                <path key={i} d={d} fillRule="evenodd" />
            ))}
        </SVGIconContainer>
    );
});
RangeRing.displayName = `Blueprint6.Icon.RangeRing`;
export default RangeRing;
