// 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 * as React from 'react';
import { mergeClasses } from "@coreai-ds/react-components";
import type { DrawerProps } from "@coreai-ds/react-components";
import { InlineDrawer } from "@coreai-ds/react-components";
import { DrawerHeader } from "@coreai-ds/react-components";
import { DrawerHeaderTitle } from "@coreai-ds/react-components";
import { Button } from "@coreai-ds/react-components";
import { Dismiss24Regular } from "@fluentui/react-icons";
import { DrawerBody } from "@coreai-ds/react-components";

const useStyles = makeStyles({
    root: {
        border: '2px solid #ccc',
        overflow: 'hidden',
        display: 'flex',
        height: '480px',
        backgroundColor: '#fff',
    },
    content: {
        flex: '1',
        padding: '16px',
        display: 'flex',
        justifyContent: 'center',
        alignItems: 'flex-start',
        columnGap: tokens.spacingHorizontalXS,
    },
    flexColumn: {
        flexDirection: 'column',
    },
});

type DrawerSeparatorExampleProps = {
    open: boolean;
    setOpen: (open: boolean) => void;
    position: DrawerProps['position'];
    className?: string;
};

const DrawerSeparatorExample: React.FC<DrawerSeparatorExampleProps> = ({ open, setOpen, position }) => {
    return (<InlineDrawer separator position={position} open={open}>
      <DrawerHeader>
        <DrawerHeaderTitle action={<Button appearance="subtle" aria-label="Close" icon={<Dismiss24Regular />} onClick={() => setOpen(false)}/>}>
          Drawer with separator
        </DrawerHeaderTitle>
      </DrawerHeader>

      <DrawerBody>
        <p>Drawer content</p>
      </DrawerBody>
    </InlineDrawer>);
};

export const Separator = (): JSXElement => {
    const styles = useStyles();
    const [startOpen, setStartOpen] = React.useState(true);
    const [endOpen, setEndOpen] = React.useState(true);
    const [bottomOpen, setBottomOpen] = React.useState(true);
    return (<div className={mergeClasses(styles.root, styles.flexColumn)}>
      <div className={styles.root} style={{ borderBottomWidth: 0 }}>
        <DrawerSeparatorExample open={startOpen} setOpen={setStartOpen} position="start"/>

        <div className={styles.content}>
          <Button appearance="primary" onClick={() => setStartOpen(!startOpen)}>
            Toggle start
          </Button>

          <Button appearance="primary" onClick={() => setEndOpen(!endOpen)}>
            Toggle end
          </Button>

          <Button appearance="primary" onClick={() => setBottomOpen(!bottomOpen)}>
            Toggle bottom
          </Button>
        </div>
        <DrawerSeparatorExample open={endOpen} setOpen={setEndOpen} position="end"/>
      </div>
      <DrawerSeparatorExample open={bottomOpen} setOpen={setBottomOpen} position="bottom"/>
    </div>);
};

export default Separator;
