import { BasicSchema } from '..';

export enum BASIC_TYPE {
    Boolean = 'Boolean',
    Integer = 'Integer',
    Long = 'Long',
    Decimal = 'Decimal',
    String = 'String',
    Text = 'Text',
    Binary = 'Binary',
    Date = 'Date',
    Time = 'Time',
    DateTime = 'DateTime',
    Email = 'Email',
}

export const basicTypeList = [
    { kind: 'basicType', text: 'Boolean 布尔值', value: '#/basicTypes/Boolean' },
    { kind: 'basicType', text: 'Integer 整数', value: '#/basicTypes/Integer' },
    { kind: 'basicType', text: 'Long 长整数', value: '#/basicTypes/Long' },
    { kind: 'basicType', text: 'Double 小数', value: '#/basicTypes/Decimal' },
    { kind: 'basicType', text: 'String 字符串', value: '#/basicTypes/String' },
    { kind: 'basicType', text: 'Text 长文本', value: '#/basicTypes/Text' },
    { kind: 'basicType', text: 'Binary 二进制流', value: '#/basicTypes/Binary' },
    { kind: 'basicType', text: 'Date 日期', value: '#/basicTypes/Date' },
    { kind: 'basicType', text: 'Time 时间', value: '#/basicTypes/Time' },
    { kind: 'basicType', text: 'DateTime 日期时间', value: '#/basicTypes/DateTime' },
    { kind: 'basicType', text: 'Email 电子邮箱', value: '#/basicTypes/Email' },
];

export const basicTypeMap: { [name: string]: BasicSchema } = {
    '#/basicTypes/Boolean': { type: 'boolean', format: '' },
    '#/basicTypes/Integer': { type: 'integer', format: 'int' },
    '#/basicTypes/Long': { type: 'integer', format: 'long' },
    '#/basicTypes/Decimal': { type: 'number', format: 'double' },
    '#/basicTypes/String': { type: 'string', format: '' },
    '#/basicTypes/Text': { type: 'string', format: 'text' },
    '#/basicTypes/Binary': { type: 'string', format: 'binary' },
    '#/basicTypes/Date': { type: 'string', format: 'date' },
    '#/basicTypes/Time': { type: 'string', format: 'time' },
    '#/basicTypes/DateTime': { type: 'string', format: 'date-time' },
    '#/basicTypes/Email': { type: 'string', format: 'email' },
};

export function getBasicTypeName(type: string, format: string) {
    if (type === 'boolean')
        return BASIC_TYPE.Boolean;
    else if (type === 'integer' && format === 'long')
        return BASIC_TYPE.Long;
    else if (type === 'integer')
        return BASIC_TYPE.Integer;
    else if (type === 'number')
        return BASIC_TYPE.Decimal;
    else if (type === 'string' && format === 'text')
        return BASIC_TYPE.Text;
    else if (type === 'string' && format === 'binary')
        return BASIC_TYPE.Binary;
    else if (type === 'string' && format === 'date')
        return BASIC_TYPE.Date;
    else if (type === 'string' && format === 'time')
        return BASIC_TYPE.Time;
    else if (type === 'string' && format === 'date-time')
        return BASIC_TYPE.DateTime;
    else if (type === 'string' && format === 'email')
        return BASIC_TYPE.Email;
    else if (type === 'string')
        return BASIC_TYPE.String;
}

export function getBasicTypeRef(type: string, format: string) {
    return `#/basicTypes/${getBasicTypeName(type, format)}`;
}

export function getBasicTypeDefaultValue(value?: any): void {
    return undefined;
}
