import { createElement } from 'react';
import { CalendarOutlineMd } from '../../../../../icons/CalendarOutlineMd';
import { DocOutlineMd } from '../../../../../icons/DocOutlineMd';
import { ArrayIcon, BooleanIcon, KeyIcon, NullIcon, NumberIcon, ObjectIcon, TextIcon, } from '../../icons';
/**
 * Возвращает информацию о типе данных
 * @param {JsonValue} value - JSON значение
 * @param {Theme} theme - Тема
 * @returns {TypeInfo} - Иконка, цвет и тип данных
 */
export const getTypeInfo = (value, theme) => {
    if (value === null) {
        return {
            type: 'null',
            icon: createElement(NullIcon),
            color: theme.palette.grey[500],
        };
    }
    if (Array.isArray(value)) {
        return {
            type: 'array',
            icon: createElement(ArrayIcon),
            color: theme.palette.primary.main,
        };
    }
    switch (typeof value) {
        case 'string':
            if (value.match(/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i)) {
                return {
                    type: 'guid',
                    icon: createElement(KeyIcon),
                    color: theme.palette.yellow[600],
                };
            }
            if (value.match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/)) {
                return {
                    type: 'date',
                    icon: createElement(CalendarOutlineMd),
                    color: theme.palette.red[900],
                };
            }
            return {
                type: 'string',
                icon: createElement(TextIcon),
                color: theme.palette.green[700],
            };
        case 'number':
            return {
                type: 'number',
                icon: createElement(NumberIcon),
                color: theme.palette.warning[900],
            };
        case 'boolean':
            return {
                type: 'boolean',
                icon: createElement(BooleanIcon),
                color: theme.palette.primary[500],
            };
        case 'object':
            return {
                type: 'object',
                icon: createElement(ObjectIcon),
                color: theme.palette.error[800],
            };
        default:
            return {
                type: 'unknown',
                icon: createElement(DocOutlineMd),
                color: theme.palette.grey[300],
            };
    }
};
