// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.

import type { JSXElement } from "@coreai-ds/react-components";
import { makeStyles } from "@coreai-ds/react-components";
import { tokens } from "@coreai-ds/react-components";
import { useId } from "@coreai-ds/react-components";
import * as React from 'react';
import type { SpinButtonChangeEvent } from "@coreai-ds/react-components";
import type { SpinButtonOnChangeData } from "@coreai-ds/react-components";
import { Label } from "@coreai-ds/react-components";
import { SpinButton } from "@coreai-ds/react-components";

const useLayoutStyles = makeStyles({
    base: {
        display: 'flex',
        flexDirection: 'column',
        maxWidth: '500px',
        '> label': {
            marginBottom: tokens.spacingVerticalXXS,
        },
    },
});

export const Controlled = (): JSXElement => {
    const layoutStyles = useLayoutStyles();
    const id = useId();
    const [spinButtonValue, setSpinButtonValue] = React.useState<number | null>(10);
    const onSpinButtonChange = React.useCallback((_ev: SpinButtonChangeEvent, data: SpinButtonOnChangeData) => {
        console.log('onSpinButtonChange', data.value, data.displayValue);
        if (data.value !== undefined) {
            setSpinButtonValue(data.value);
        }
        else if (data.displayValue !== undefined) {
            const newValue = parseFloat(data.displayValue);
            if (!Number.isNaN(newValue)) {
                setSpinButtonValue(newValue);
            }
            else {
                console.error(`Cannot parse "${data.displayValue}" as a number.`);
            }
        }
    }, [setSpinButtonValue]);
    return (<div className={layoutStyles.base}>
      <Label htmlFor={id}>Controlled SpinButton</Label>
      <SpinButton value={spinButtonValue} onChange={onSpinButtonChange} id={id}/>
    </div>);
};

export default Controlled;
