export namespace Daisy {
	type SemanticColorType = 'info' | 'success' | 'warning' | 'error';
	type ThemeColorType = 'primary' | 'secondary' | 'accent';
	type StatusModifierType = 'active' | 'disabled' | 'readonly' | 'loading' | 'open';
	type AlignType = 'start' | 'center' | 'end';
	type PositionType = 'top' | 'right' | 'bottom' | 'left';

	const Sizes: Record<
		SizeType,
		{
			[key in ComponentType | 'size' | 'loading' | 'icon']: string;
		} & {
			[key in 'value']: number;
		}
	> = {
		xs: {
			btn: 'btn-xs',
			loading: 'loading-xs',
			input: 'input-xs',
			textarea: 'textarea-xs',
			size: 'size-6',
			checkbox: 'checkbox-xs',
			tabs: 'tabs-xs',
			icon: 'size-4',
			select: 'select-xs',
			badge: 'badge-xs',
			kbd: 'kbd-xs',
			table: 'table-xs',
			'btm-nav': 'btm-nav-xs',
			menu: 'menu-xs',
			'file-input': 'file-input-xs',
			value: 24,
		},
		sm: {
			btn: 'btn-sm',
			loading: 'loading-sm',
			input: 'input-sm',
			textarea: 'textarea-sm',
			checkbox: 'checkbox-sm',
			size: 'size-8',
			tabs: 'tabs-sm',
			icon: 'size-5',
			select: 'select-sm',
			badge: 'badge-sm',
			kbd: 'kbd-sm',
			table: 'table-sm',
			'btm-nav': 'btm-nav-sm',
			menu: 'menu-sm',
			'file-input': 'file-input-sm',
			value: 32,
		},
		md: {
			btn: 'btn-md',
			loading: 'loading',
			input: 'input-md',
			textarea: 'textarea-md',
			checkbox: 'checkbox-md',
			size: 'size-12',
			tabs: 'tabs-md',
			icon: 'size-8',
			select: 'select-md',
			badge: 'badge-md',
			kbd: 'kbd-md',
			table: 'table-md',
			'btm-nav': 'btm-nav-md',
			menu: 'menu-md',
			'file-input': 'file-input-md',
			value: 48,
		},
		lg: {
			btn: 'btn-lg',
			loading: 'loading-lg',
			input: 'input-lg',
			textarea: 'textarea-lg',
			checkbox: 'checkbox-lg',
			size: 'size-16',
			tabs: 'tabs-lg',
			icon: 'size-12',
			badge: 'badge-lg',
			select: 'select-lg',
			kbd: 'kbd-lg',
			table: 'table-lg',
			'btm-nav': 'btm-nav-lg',
			menu: 'menu-lg',
			'file-input': 'file-input-lg',
			value: 64,
		},
	};

	export type SizeType = 'xs' | 'sm' | 'md' | 'lg';

	type ComponentType =
		| 'btn'
		| 'input'
		| 'textarea'
		| 'checkbox'
		| 'tabs'
		| 'select'
		| 'badge'
		| 'kbd'
		| 'table'
		| 'btm-nav'
		| 'menu'
		| 'file-input';

	// radio range rating toggle

	export function getSize(size?: SizeType) {
		return size ? Sizes[size] : undefined;
	}

	function sizeOf(type: ComponentType, size: SizeType = 'md') {
		return size ? Sizes[size][type] : undefined;
	}
}

type ComponentDef = {
	name: string;
	size?: boolean;
	semanticColor?: boolean;
	themeColor?: boolean;
	modifiers?: string[];
};

const Components: ComponentDef[] = [
	{
		name: 'button',
		size: true,
		semanticColor: true,
		themeColor: true,
	},
];
