import { _decorator, CCBoolean, CCInteger, CCString, Enum, Label } from 'cc';
// @ts-ignore
import { EDITOR } from 'cc/env';
// import ICUType from '../core/ICUType';
// import I18nComponent from './I18nComponent';
// import { DateTimeFormatOptions, NumberFormatOptions, RelativeTimeFormatOptions, RelativeTimeFormatUnit } from '../core/ICUOptions';
// import intl from '../core/IntlManager';

const {
    ccclass,
    property,
    requireComponent,
    executeInEditMode,
} = _decorator;

enum VirtualEnum {}

// @ccclass('ICUComponent')
// @executeInEditMode(true)
// @requireComponent(Label)
// export default class ICUComponent extends I18nComponent {
//     @property({ visible: false })
//     _icuValue = '';
//
//     @property
//     set icuValue(value: string) {
//         this._icuValue = value;
//         this.render();
//     }
//
//     get icuValue(): string {
//         return this._icuValue;
//     }
//
//     @property({ visible: false })
//         _type: ICUType = ICUType.DateTime;
//
//     @property({ visible: true, type: Enum(ICUType) })
//     set type(value: ICUType) {
//         this._type = value;
//     }
//
//     get type(): ICUType {
//         return this._type;
//     }
//
//     protected onLoad() {
//         super.onLoad();
//         if (this.label && !this._icuValue) {
//             this._icuValue = this.label.string;
//         }
//     }
//
//     protected start() {
//         this.render();
//     }
//
//     public render() {
//         super.render();
//         if (this._icuValue.length === 0) return;
//         let translatedString!: string;
//         try {
//             switch (this.type) {
//                 case ICUType.Number:
//                     translatedString = intl.tn(parseFloat(this.icuValue), this.numberFormatOptions);
//                     break;
//                 case ICUType.DateTime:
//                     translatedString = intl.td(new Date(this.icuValue), this.dateTimeFormatOptions);
//                     break;
//                 case ICUType.RelativeTime:
//                     translatedString = intl.tt(
//                         parseFloat(this.icuValue),
//                         this.relativeTimeUnit,
//                         this.relativeTimeFormatOptions,
//                     );
//                     break;
//                 case ICUType.List: {
//                     const icuList = this.icuValue.split(',');
//                     translatedString = intl.tl(icuList);
//                     break;
//                 }
//                 default:
//                     break;
//             }
//         } catch (e) {
//             translatedString = this._icuValue;
//         }
//         if (EDITOR) {
//             this.preview(translatedString);
//         } else {
//             this.label!.string = translatedString;
//         }
//     }
//
//     // ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ auto generate by script don't edit ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
//     /************************** NumberFormatOptions **************************/
//     @property({ visible: false })
//         numberFormatOptions: NumberFormatOptions = { useGrouping: false };
//     @property({
//         type: Enum(VirtualEnum),
//         group: 'Number',
//         visible(this: ICUComponent) {
//             return this.type === ICUType.Number;
//         },
//     })
//     set numberStyle(value: string) {
//         this.numberFormatOptions.style = value;
//         this.render();
//     }
//     get numberStyle(): string {
//         return this.numberFormatOptions.style as string;
//     }
//
//     @property({
//         type: CCString,
//         group: 'Number',
//         visible(this: ICUComponent) {
//             return this.type === ICUType.Number;
//         },
//     })
//     set currency(value: string) {
//         this.numberFormatOptions.currency = value;
//         this.render();
//     }
//     get currency(): string {
//         return this.numberFormatOptions.currency as string;
//     }
//
//     @property({
//         type: Enum(VirtualEnum),
//         group: 'Number',
//         visible(this: ICUComponent) {
//             return this.type === ICUType.Number;
//         },
//     })
//     set currencySign(value: string) {
//         this.numberFormatOptions.currencySign = value;
//         this.render();
//     }
//     get currencySign(): string {
//         return this.numberFormatOptions.currencySign as string;
//     }
//
//     @property({
//         type: Enum(VirtualEnum),
//         group: 'Number',
//         visible(this: ICUComponent) {
//             return this.type === ICUType.Number;
//         },
//     })
//     set currencyDisplay(value: string) {
//         this.numberFormatOptions.currencyDisplay = value;
//         this.render();
//     }
//     get currencyDisplay(): string {
//         return this.numberFormatOptions.currencyDisplay as string;
//     }
//
//     @property({
//         type: CCBoolean,
//         group: 'Number',
//         visible(this: ICUComponent) {
//             return this.type === ICUType.Number;
//         },
//     })
//     set useGrouping(value: boolean) {
//         this.numberFormatOptions.useGrouping = value;
//         this.render();
//     }
//     get useGrouping(): boolean {
//         return this.numberFormatOptions.useGrouping as boolean;
//     }
//
//     @property({
//         type: CCInteger,
//         group: 'Number',
//         visible(this: ICUComponent) {
//             return this.type === ICUType.Number;
//         },
//     })
//     set minimumIntegerDigits(value: number) {
//         this.numberFormatOptions.minimumIntegerDigits = value;
//         this.render();
//     }
//     get minimumIntegerDigits(): number {
//         return this.numberFormatOptions.minimumIntegerDigits as number;
//     }
//
//     @property({
//         type: CCInteger,
//         group: 'Number',
//         visible(this: ICUComponent) {
//             return this.type === ICUType.Number;
//         },
//     })
//     set minimumFractionDigits(value: number) {
//         this.numberFormatOptions.minimumFractionDigits = value;
//         this.render();
//     }
//     get minimumFractionDigits(): number {
//         return this.numberFormatOptions.minimumFractionDigits as number;
//     }
//
//     @property({
//         type: CCInteger,
//         group: 'Number',
//         visible(this: ICUComponent) {
//             return this.type === ICUType.Number;
//         },
//     })
//     set maximumFractionDigits(value: number) {
//         this.numberFormatOptions.maximumFractionDigits = value;
//         this.render();
//     }
//     get maximumFractionDigits(): number {
//         return this.numberFormatOptions.maximumFractionDigits as number;
//     }
//
//     @property({
//         type: CCInteger,
//         group: 'Number',
//         visible(this: ICUComponent) {
//             return this.type === ICUType.Number;
//         },
//     })
//     set minimumSignificantDigits(value: number) {
//         this.numberFormatOptions.minimumSignificantDigits = value;
//         this.render();
//     }
//     get minimumSignificantDigits(): number {
//         return this.numberFormatOptions.minimumSignificantDigits as number;
//     }
//
//     @property({
//         type: CCInteger,
//         group: 'Number',
//         visible(this: ICUComponent) {
//             return this.type === ICUType.Number;
//         },
//     })
//     set maximumSignificantDigits(value: number) {
//         this.numberFormatOptions.maximumSignificantDigits = value;
//         this.render();
//     }
//     get maximumSignificantDigits(): number {
//         return this.numberFormatOptions.maximumSignificantDigits as number;
//     }
//
//     /************************** DateTimeFormatOptions **************************/
//     @property({ visible: false })
//         dateTimeFormatOptions: DateTimeFormatOptions = {};
//
//     @property({
//         type: Enum(VirtualEnum),
//         group: 'DateTime',
//         visible(this: ICUComponent) {
//             return this.type === ICUType.DateTime;
//         },
//     })
//     set dateTimeLocaleMatcher(value: string) {
//         this.dateTimeFormatOptions.localeMatcher = value;
//         this.render();
//     }
//     get dateTimeLocaleMatcher(): string {
//         return this.dateTimeFormatOptions.localeMatcher as string;
//     }
//
//     @property({
//         type: Enum(VirtualEnum),
//         group: 'DateTime',
//         visible(this: ICUComponent) {
//             return this.type === ICUType.DateTime;
//         },
//     })
//     set weekday(value: string) {
//         this.dateTimeFormatOptions.weekday = value;
//         this.render();
//     }
//     get weekday(): string {
//         return this.dateTimeFormatOptions.weekday as string;
//     }
//
//     @property({
//         type: Enum(VirtualEnum),
//         group: 'DateTime',
//         visible(this: ICUComponent) {
//             return this.type === ICUType.DateTime;
//         },
//     })
//     set era(value: string) {
//         this.dateTimeFormatOptions.era = value;
//         this.render();
//     }
//     get era(): string {
//         return this.dateTimeFormatOptions.era as string;
//     }
//
//     @property({
//         type: Enum(VirtualEnum),
//         group: 'DateTime',
//         visible(this: ICUComponent) {
//             return this.type === ICUType.DateTime;
//         },
//     })
//     set year(value: string) {
//         this.dateTimeFormatOptions.year = value;
//         this.render();
//     }
//     get year(): string {
//         return this.dateTimeFormatOptions.year as string;
//     }
//
//     @property({
//         type: Enum(VirtualEnum),
//         group: 'DateTime',
//         visible(this: ICUComponent) {
//             return this.type === ICUType.DateTime;
//         },
//     })
//     set month(value: string) {
//         this.dateTimeFormatOptions.month = value;
//         this.render();
//     }
//     get month(): string {
//         return this.dateTimeFormatOptions.month as string;
//     }
//
//     @property({
//         type: Enum(VirtualEnum),
//         group: 'DateTime',
//         visible(this: ICUComponent) {
//             return this.type === ICUType.DateTime;
//         },
//     })
//     set day(value: string) {
//         this.dateTimeFormatOptions.day = value;
//         this.render();
//     }
//     get day(): string {
//         return this.dateTimeFormatOptions.day as string;
//     }
//
//     @property({
//         type: Enum(VirtualEnum),
//         group: 'DateTime',
//         visible(this: ICUComponent) {
//             return this.type === ICUType.DateTime;
//         },
//     })
//     set hour(value: string) {
//         this.dateTimeFormatOptions.hour = value;
//         this.render();
//     }
//     get hour(): string {
//         return this.dateTimeFormatOptions.hour as string;
//     }
//
//     @property({
//         type: Enum(VirtualEnum),
//         group: 'DateTime',
//         visible(this: ICUComponent) {
//             return this.type === ICUType.DateTime;
//         },
//     })
//     set minute(value: string) {
//         this.dateTimeFormatOptions.minute = value;
//         this.render();
//     }
//     get minute(): string {
//         return this.dateTimeFormatOptions.minute as string;
//     }
//
//     @property({
//         type: Enum(VirtualEnum),
//         group: 'DateTime',
//         visible(this: ICUComponent) {
//             return this.type === ICUType.DateTime;
//         },
//     })
//     set second(value: string) {
//         this.dateTimeFormatOptions.second = value;
//         this.render();
//     }
//     get second(): string {
//         return this.dateTimeFormatOptions.second as string;
//     }
//
//     @property({
//         type: Enum(VirtualEnum),
//         group: 'DateTime',
//         visible(this: ICUComponent) {
//             return this.type === ICUType.DateTime;
//         },
//     })
//     set timeZoneName(value: string) {
//         this.dateTimeFormatOptions.timeZoneName = value;
//         this.render();
//     }
//     get timeZoneName(): string {
//         return this.dateTimeFormatOptions.timeZoneName as string;
//     }
//
//     @property({
//         type: Enum(VirtualEnum),
//         group: 'DateTime',
//         visible(this: ICUComponent) {
//             return this.type === ICUType.DateTime;
//         },
//     })
//     set formatMatcher(value: string) {
//         this.dateTimeFormatOptions.formatMatcher = value;
//         this.render();
//     }
//     get formatMatcher(): string {
//         return this.dateTimeFormatOptions.formatMatcher as string;
//     }
//
//     @property({
//         type: CCBoolean,
//         group: 'DateTime',
//         visible(this: ICUComponent) {
//             return this.type === ICUType.DateTime;
//         },
//     })
//     set hour12(value: boolean) {
//         this.dateTimeFormatOptions.hour12 = value;
//         this.render();
//     }
//     get hour12(): boolean {
//         return this.dateTimeFormatOptions.hour12 as boolean;
//     }
//
//     @property({
//         type: CCString,
//         group: 'DateTime',
//         visible(this: ICUComponent) {
//             return this.type === ICUType.DateTime;
//         },
//     })
//     set timeZone(value: string) {
//         this.dateTimeFormatOptions.timeZone = value;
//         this.render();
//     }
//     get timeZone(): string {
//         return this.dateTimeFormatOptions.timeZone as string;
//     }
//
//     /************************** RelativeTimeOptions **************************/
//     @property({ visible: false })
//         relativeTimeFormatOptions: RelativeTimeFormatOptions = {};
//
//     @property({
//         type: Enum(VirtualEnum),
//         group: 'RelativeTime',
//         visible(this: ICUComponent) {
//             return this.type === ICUType.RelativeTime;
//         },
//     })
//     set relativeTimeLocaleMatcher(value: string) {
//         this.relativeTimeFormatOptions.localeMatcher = value;
//         this.render();
//     }
//     get relativeTimeLocaleMatcher(): string {
//         return this.relativeTimeFormatOptions.localeMatcher as string;
//     }
//
//     @property({
//         type: Enum(VirtualEnum),
//         group: 'RelativeTime',
//         visible(this: ICUComponent) {
//             return this.type === ICUType.RelativeTime;
//         },
//     })
//     set numeric(value: string) {
//         this.relativeTimeFormatOptions.numeric = value;
//         this.render();
//     }
//     get numeric(): string {
//         return this.relativeTimeFormatOptions.numeric as string;
//     }
//
//     @property({
//         type: Enum(VirtualEnum),
//         group: 'RelativeTime',
//         visible(this: ICUComponent) {
//             return this.type === ICUType.RelativeTime;
//         },
//     })
//     set relativeTimeStyle(value: string) {
//         this.relativeTimeFormatOptions.style = value;
//         this.render();
//     }
//     get relativeTimeStyle(): string {
//         return this.relativeTimeFormatOptions.style as string;
//     }
//
//     @property({ visible: false })
//         _relativeTimeUnit: RelativeTimeFormatUnit = 'second';
//
//     @property({
//         type: Enum(VirtualEnum),
//         group: 'RelativeTime',
//         visible(this: ICUComponent) {
//             return this.type === ICUType.RelativeTime;
//         },
//     })
//     set relativeTimeUnit(value: string) {
//         this._relativeTimeUnit = value;
//         this.render();
//     }
//     get relativeTimeUnit(): string {
//         return this._relativeTimeUnit;
//     }
//
//     // ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ auto generate by script don't edit ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
// }
