import React, { createContext, useContext } from 'react';
import { Expandable } from '../expandable';
import type { CardContextProps } from './types';

const CardContext = createContext<CardContextProps | undefined>(undefined);

export const useCardContext = (): CardContextProps | undefined => useContext(CardContext);

export interface CardProviderProps extends CardContextProps {
    children: React.ReactNode;
    defaultExpanded?: boolean;
    onExpand?: (expanded: boolean) => void;
    expanded?: boolean;
}

export const CardProvider = ({
    children,
    expanded,
    onExpand,
    defaultExpanded,
    ...context
}: CardProviderProps) => (
    <Expandable
        expanded={expanded}
        onExpanded={onExpand}
        defaultExpanded={defaultExpanded}
        isExpandable={context.expandable}
    >
        <CardContext.Provider value={context}>{children}</CardContext.Provider>
    </Expandable>
);
