19596a2c1Sopenharmony_ci/*
29596a2c1Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
39596a2c1Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
49596a2c1Sopenharmony_ci * you may not use this file except in compliance with the License.
59596a2c1Sopenharmony_ci * You may obtain a copy of the License at
69596a2c1Sopenharmony_ci *
79596a2c1Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
89596a2c1Sopenharmony_ci *
99596a2c1Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
109596a2c1Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
119596a2c1Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
129596a2c1Sopenharmony_ci * See the License for the specific language governing permissions and
139596a2c1Sopenharmony_ci * limitations under the License.
149596a2c1Sopenharmony_ci */
159596a2c1Sopenharmony_ci
169596a2c1Sopenharmony_ci#include <vector>
179596a2c1Sopenharmony_ci#include "error_util.h"
189596a2c1Sopenharmony_ci#include "i18n_hilog.h"
199596a2c1Sopenharmony_ci#include "locale_config.h"
209596a2c1Sopenharmony_ci#include "variable_convertor.h"
219596a2c1Sopenharmony_ci#include "holiday_manager_addon.h"
229596a2c1Sopenharmony_ci
239596a2c1Sopenharmony_cinamespace OHOS {
249596a2c1Sopenharmony_cinamespace Global {
259596a2c1Sopenharmony_cinamespace I18n {
269596a2c1Sopenharmony_ciHolidayManagerAddon::HolidayManagerAddon() : env_(nullptr) {}
279596a2c1Sopenharmony_ci
289596a2c1Sopenharmony_ciHolidayManagerAddon::~HolidayManagerAddon()
299596a2c1Sopenharmony_ci{
309596a2c1Sopenharmony_ci}
319596a2c1Sopenharmony_ci
329596a2c1Sopenharmony_civoid HolidayManagerAddon::Destructor(napi_env env, void *nativeObject, void *hint)
339596a2c1Sopenharmony_ci{
349596a2c1Sopenharmony_ci    if (!nativeObject) {
359596a2c1Sopenharmony_ci        return;
369596a2c1Sopenharmony_ci    }
379596a2c1Sopenharmony_ci    delete reinterpret_cast<HolidayManagerAddon *>(nativeObject);
389596a2c1Sopenharmony_ci    nativeObject = nullptr;
399596a2c1Sopenharmony_ci}
409596a2c1Sopenharmony_ci
419596a2c1Sopenharmony_cinapi_value HolidayManagerAddon::InitHolidayManager(napi_env env, napi_value exports)
429596a2c1Sopenharmony_ci{
439596a2c1Sopenharmony_ci    napi_status status = napi_ok;
449596a2c1Sopenharmony_ci    napi_property_descriptor properties[] = {
459596a2c1Sopenharmony_ci        DECLARE_NAPI_FUNCTION("isHoliday", IsHoliday),
469596a2c1Sopenharmony_ci        DECLARE_NAPI_FUNCTION("getHolidayInfoItemArray", GetHolidayInfoItemArray)
479596a2c1Sopenharmony_ci    };
489596a2c1Sopenharmony_ci
499596a2c1Sopenharmony_ci    napi_value constructor = nullptr;
509596a2c1Sopenharmony_ci    status = napi_define_class(env, "HolidayManager", NAPI_AUTO_LENGTH, HolidayManagerConstructor, nullptr,
519596a2c1Sopenharmony_ci        sizeof(properties) / sizeof(napi_property_descriptor), properties, &constructor);
529596a2c1Sopenharmony_ci    if (status != napi_ok) {
539596a2c1Sopenharmony_ci        HILOG_ERROR_I18N("Define class failed when InitHolidayManager");
549596a2c1Sopenharmony_ci        return nullptr;
559596a2c1Sopenharmony_ci    }
569596a2c1Sopenharmony_ci
579596a2c1Sopenharmony_ci    status = napi_set_named_property(env, exports, "HolidayManager", constructor);
589596a2c1Sopenharmony_ci    if (status != napi_ok) {
599596a2c1Sopenharmony_ci        HILOG_ERROR_I18N("Set property failed when InitHolidayManager");
609596a2c1Sopenharmony_ci        return nullptr;
619596a2c1Sopenharmony_ci    }
629596a2c1Sopenharmony_ci    return exports;
639596a2c1Sopenharmony_ci}
649596a2c1Sopenharmony_ci
659596a2c1Sopenharmony_cinapi_value HolidayManagerAddon::HolidayManagerConstructor(napi_env env, napi_callback_info info)
669596a2c1Sopenharmony_ci{
679596a2c1Sopenharmony_ci    size_t argc = 1;
689596a2c1Sopenharmony_ci    napi_value argv[1] = { 0 };
699596a2c1Sopenharmony_ci    napi_value thisVar = nullptr;
709596a2c1Sopenharmony_ci    void *data = nullptr;
719596a2c1Sopenharmony_ci    napi_status status = napi_get_cb_info(env, info, &argc, argv, &thisVar, &data);
729596a2c1Sopenharmony_ci    if (status != napi_ok) {
739596a2c1Sopenharmony_ci        return nullptr;
749596a2c1Sopenharmony_ci    } else if (argc < 1) {
759596a2c1Sopenharmony_ci        ErrorUtil::NapiThrow(env, I18N_NOT_FOUND, "icsPath", "", true);
769596a2c1Sopenharmony_ci        return nullptr;
779596a2c1Sopenharmony_ci    }
789596a2c1Sopenharmony_ci    napi_valuetype valueType = napi_valuetype::napi_undefined;
799596a2c1Sopenharmony_ci    napi_typeof(env, argv[0], &valueType);
809596a2c1Sopenharmony_ci    if (valueType != napi_valuetype::napi_string) {
819596a2c1Sopenharmony_ci        ErrorUtil::NapiThrow(env, I18N_NOT_FOUND, "icsPath", "string", true);
829596a2c1Sopenharmony_ci        return nullptr;
839596a2c1Sopenharmony_ci    }
849596a2c1Sopenharmony_ci    std::unique_ptr<HolidayManagerAddon> obj = std::make_unique<HolidayManagerAddon>();
859596a2c1Sopenharmony_ci    status =
869596a2c1Sopenharmony_ci        napi_wrap(env, thisVar, reinterpret_cast<void *>(obj.get()), HolidayManagerAddon::Destructor, nullptr, nullptr);
879596a2c1Sopenharmony_ci    if (status != napi_ok) {
889596a2c1Sopenharmony_ci        HILOG_ERROR_I18N("Wrap HolidayManagerAddon failed");
899596a2c1Sopenharmony_ci        return nullptr;
909596a2c1Sopenharmony_ci    }
919596a2c1Sopenharmony_ci    int32_t code = 0;
929596a2c1Sopenharmony_ci    std::string path = VariableConvertor::GetString(env, argv[0], code);
939596a2c1Sopenharmony_ci    if (code) {
949596a2c1Sopenharmony_ci        return nullptr;
959596a2c1Sopenharmony_ci    }
969596a2c1Sopenharmony_ci    if (!obj->InitHolidayManagerContext(env, info, path.c_str())) {
979596a2c1Sopenharmony_ci        HILOG_ERROR_I18N("Init HolidayManager failed");
989596a2c1Sopenharmony_ci        return nullptr;
999596a2c1Sopenharmony_ci    }
1009596a2c1Sopenharmony_ci    obj.release();
1019596a2c1Sopenharmony_ci    return thisVar;
1029596a2c1Sopenharmony_ci}
1039596a2c1Sopenharmony_ci
1049596a2c1Sopenharmony_cibool HolidayManagerAddon::InitHolidayManagerContext(napi_env env, napi_callback_info info, const char* path)
1059596a2c1Sopenharmony_ci{
1069596a2c1Sopenharmony_ci    napi_value global = nullptr;
1079596a2c1Sopenharmony_ci    napi_status status = napi_get_global(env, &global);
1089596a2c1Sopenharmony_ci    if (status != napi_ok) {
1099596a2c1Sopenharmony_ci        HILOG_ERROR_I18N("Get global failed");
1109596a2c1Sopenharmony_ci        return false;
1119596a2c1Sopenharmony_ci    }
1129596a2c1Sopenharmony_ci    env_ = env;
1139596a2c1Sopenharmony_ci    holidayManager_ = std::make_unique<HolidayManager>(path);
1149596a2c1Sopenharmony_ci    return holidayManager_ != nullptr;
1159596a2c1Sopenharmony_ci}
1169596a2c1Sopenharmony_ci
1179596a2c1Sopenharmony_cinapi_value HolidayManagerAddon::IsHoliday(napi_env env, napi_callback_info info)
1189596a2c1Sopenharmony_ci{
1199596a2c1Sopenharmony_ci    size_t argc = 1;
1209596a2c1Sopenharmony_ci    napi_value argv[1] = { 0 };
1219596a2c1Sopenharmony_ci    napi_value thisVar = nullptr;
1229596a2c1Sopenharmony_ci    napi_status status = napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL);
1239596a2c1Sopenharmony_ci    if (status != napi_ok) {
1249596a2c1Sopenharmony_ci        return nullptr;
1259596a2c1Sopenharmony_ci    }
1269596a2c1Sopenharmony_ci    HolidayManagerAddon *obj = nullptr;
1279596a2c1Sopenharmony_ci    status = napi_unwrap(env, thisVar, reinterpret_cast<void **>(&obj));
1289596a2c1Sopenharmony_ci    if (status != napi_ok || !obj || !obj->holidayManager_) {
1299596a2c1Sopenharmony_ci        HILOG_ERROR_I18N("IsHoliday: Get HolidayManager object failed");
1309596a2c1Sopenharmony_ci        return nullptr;
1319596a2c1Sopenharmony_ci    }
1329596a2c1Sopenharmony_ci    napi_value result = nullptr;
1339596a2c1Sopenharmony_ci    bool flag = VariableConvertor::CheckNapiValueType(env, argv[0]);
1349596a2c1Sopenharmony_ci    bool res = false;
1359596a2c1Sopenharmony_ci    if (flag) {
1369596a2c1Sopenharmony_ci        std::vector<int> list = ValidateParamDate(env, argv[0]);
1379596a2c1Sopenharmony_ci        if (list.size() == 3) { // 3 is the number of parameters
1389596a2c1Sopenharmony_ci            // 0, 1, and 2 indicate that the first, second, and third parameters of the list are read
1399596a2c1Sopenharmony_ci            res = obj->holidayManager_->IsHoliday(list.at(0), list.at(1), list.at(2));
1409596a2c1Sopenharmony_ci        }
1419596a2c1Sopenharmony_ci    } else {
1429596a2c1Sopenharmony_ci        res = obj->holidayManager_->IsHoliday();
1439596a2c1Sopenharmony_ci    }
1449596a2c1Sopenharmony_ci    status = napi_get_boolean(env, res, &result);
1459596a2c1Sopenharmony_ci    return result;
1469596a2c1Sopenharmony_ci}
1479596a2c1Sopenharmony_ci
1489596a2c1Sopenharmony_cinapi_value HolidayManagerAddon::GetHolidayInfoItemArray(napi_env env, napi_callback_info info)
1499596a2c1Sopenharmony_ci{
1509596a2c1Sopenharmony_ci    size_t argc = 1;
1519596a2c1Sopenharmony_ci    napi_value argv[1] = { 0 };
1529596a2c1Sopenharmony_ci    argv[0] = nullptr;
1539596a2c1Sopenharmony_ci    napi_value thisVar = nullptr;
1549596a2c1Sopenharmony_ci    napi_status status = napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL);
1559596a2c1Sopenharmony_ci    if (status != napi_ok) {
1569596a2c1Sopenharmony_ci        return nullptr;
1579596a2c1Sopenharmony_ci    }
1589596a2c1Sopenharmony_ci    HolidayManagerAddon *obj = nullptr;
1599596a2c1Sopenharmony_ci    status = napi_unwrap(env, thisVar, reinterpret_cast<void **>(&obj));
1609596a2c1Sopenharmony_ci    if (status != napi_ok || !obj || !obj->holidayManager_) {
1619596a2c1Sopenharmony_ci        HILOG_ERROR_I18N("GetHolidayInfoItemArray: Get HolidayManager object failed");
1629596a2c1Sopenharmony_ci        return nullptr;
1639596a2c1Sopenharmony_ci    }
1649596a2c1Sopenharmony_ci    bool flag = VariableConvertor::CheckNapiValueType(env, argv[0]);
1659596a2c1Sopenharmony_ci    if (flag) {
1669596a2c1Sopenharmony_ci        int32_t year = ValidateParamNumber(env, argv[0]);
1679596a2c1Sopenharmony_ci        std::vector<HolidayInfoItem> itemList = obj->holidayManager_->GetHolidayInfoItemArray(year);
1689596a2c1Sopenharmony_ci        return GetHolidayInfoItemResult(env, itemList);
1699596a2c1Sopenharmony_ci    } else {
1709596a2c1Sopenharmony_ci        std::vector<HolidayInfoItem> itemList = obj->holidayManager_->GetHolidayInfoItemArray();
1719596a2c1Sopenharmony_ci        return GetHolidayInfoItemResult(env, itemList);
1729596a2c1Sopenharmony_ci    }
1739596a2c1Sopenharmony_ci}
1749596a2c1Sopenharmony_ci
1759596a2c1Sopenharmony_cinapi_value HolidayManagerAddon::GetHolidayInfoItemResult(napi_env env, std::vector<HolidayInfoItem> itemList)
1769596a2c1Sopenharmony_ci{
1779596a2c1Sopenharmony_ci    napi_value result = nullptr;
1789596a2c1Sopenharmony_ci    napi_status status = napi_create_array_with_length(env, itemList.size(), &result);
1799596a2c1Sopenharmony_ci    if (status != napi_ok) {
1809596a2c1Sopenharmony_ci        HILOG_ERROR_I18N("create HolidayInfoItem array failed.");
1819596a2c1Sopenharmony_ci        return nullptr;
1829596a2c1Sopenharmony_ci    }
1839596a2c1Sopenharmony_ci    for (size_t i = 0; i < itemList.size(); i++) {
1849596a2c1Sopenharmony_ci        napi_value item = CreateHolidayItem(env, itemList[i]);
1859596a2c1Sopenharmony_ci        status = napi_set_element(env, result, i, item);
1869596a2c1Sopenharmony_ci        if (status != napi_ok) {
1879596a2c1Sopenharmony_ci            HILOG_ERROR_I18N("Failed to set HolidayInfoItem element.");
1889596a2c1Sopenharmony_ci            return nullptr;
1899596a2c1Sopenharmony_ci        }
1909596a2c1Sopenharmony_ci    }
1919596a2c1Sopenharmony_ci    return result;
1929596a2c1Sopenharmony_ci}
1939596a2c1Sopenharmony_ci
1949596a2c1Sopenharmony_cistd::vector<int> HolidayManagerAddon::ValidateParamDate(napi_env &env, napi_value &argv)
1959596a2c1Sopenharmony_ci{
1969596a2c1Sopenharmony_ci    std::vector<int> list;
1979596a2c1Sopenharmony_ci    napi_valuetype valueType = napi_valuetype::napi_undefined;
1989596a2c1Sopenharmony_ci    napi_typeof(env, argv, &valueType);
1999596a2c1Sopenharmony_ci    if (valueType != napi_valuetype::napi_object) {
2009596a2c1Sopenharmony_ci        ErrorUtil::NapiThrow(env, I18N_NOT_FOUND, "date", "Date object", true);
2019596a2c1Sopenharmony_ci        return list;
2029596a2c1Sopenharmony_ci    }
2039596a2c1Sopenharmony_ci    list.push_back(GetDateValue(env, argv, "getFullYear"));
2049596a2c1Sopenharmony_ci    list.push_back(GetDateValue(env, argv, "getMonth") + MONTH_INCREASE_ONE);
2059596a2c1Sopenharmony_ci    list.push_back(GetDateValue(env, argv, "getDate"));
2069596a2c1Sopenharmony_ci    return list;
2079596a2c1Sopenharmony_ci}
2089596a2c1Sopenharmony_ci
2099596a2c1Sopenharmony_ciint HolidayManagerAddon::GetDateValue(napi_env env, napi_value value, const std::string method)
2109596a2c1Sopenharmony_ci{
2119596a2c1Sopenharmony_ci    int val = 0;
2129596a2c1Sopenharmony_ci    if (!value) {
2139596a2c1Sopenharmony_ci        return val;
2149596a2c1Sopenharmony_ci    }
2159596a2c1Sopenharmony_ci    napi_value funcGetDateInfo = nullptr;
2169596a2c1Sopenharmony_ci    napi_status status = napi_get_named_property(env, value, method.c_str(), &funcGetDateInfo);
2179596a2c1Sopenharmony_ci    if (status != napi_ok) {
2189596a2c1Sopenharmony_ci        HILOG_ERROR_I18N("Get method %{public}s failed", method.c_str());
2199596a2c1Sopenharmony_ci        return val;
2209596a2c1Sopenharmony_ci    }
2219596a2c1Sopenharmony_ci    napi_value ret_value = nullptr;
2229596a2c1Sopenharmony_ci    status = napi_call_function(env, value, funcGetDateInfo, 0, nullptr, &ret_value);
2239596a2c1Sopenharmony_ci    if (status != napi_ok) {
2249596a2c1Sopenharmony_ci        HILOG_ERROR_I18N("Get milliseconds failed");
2259596a2c1Sopenharmony_ci        return val;
2269596a2c1Sopenharmony_ci    }
2279596a2c1Sopenharmony_ci
2289596a2c1Sopenharmony_ci    status = napi_get_value_int32(env, ret_value, &val);
2299596a2c1Sopenharmony_ci    if (status != napi_ok) {
2309596a2c1Sopenharmony_ci        HILOG_ERROR_I18N("GetDateValue: Retrieve field failed");
2319596a2c1Sopenharmony_ci        return val;
2329596a2c1Sopenharmony_ci    }
2339596a2c1Sopenharmony_ci    return val;
2349596a2c1Sopenharmony_ci}
2359596a2c1Sopenharmony_ci
2369596a2c1Sopenharmony_ciint32_t HolidayManagerAddon::ValidateParamNumber(napi_env &env, napi_value &argv)
2379596a2c1Sopenharmony_ci{
2389596a2c1Sopenharmony_ci    napi_valuetype valueType = napi_valuetype::napi_undefined;
2399596a2c1Sopenharmony_ci    napi_typeof(env, argv, &valueType);
2409596a2c1Sopenharmony_ci    if (valueType != napi_valuetype::napi_number) {
2419596a2c1Sopenharmony_ci        ErrorUtil::NapiThrow(env, I18N_NOT_FOUND, "year", "number", true);
2429596a2c1Sopenharmony_ci        return -1;
2439596a2c1Sopenharmony_ci    }
2449596a2c1Sopenharmony_ci    int32_t val = 0;
2459596a2c1Sopenharmony_ci    napi_status status = napi_get_value_int32(env, argv, &val);
2469596a2c1Sopenharmony_ci    if (status != napi_ok) {
2479596a2c1Sopenharmony_ci        HILOG_ERROR_I18N("ValidateParamNumber: Retrieve field failed");
2489596a2c1Sopenharmony_ci        return -1;
2499596a2c1Sopenharmony_ci    }
2509596a2c1Sopenharmony_ci    if (val < 0) {
2519596a2c1Sopenharmony_ci        ErrorUtil::NapiThrow(env, I18N_NOT_VALID, "year", "a non-negative number", true);
2529596a2c1Sopenharmony_ci        return -1;
2539596a2c1Sopenharmony_ci    }
2549596a2c1Sopenharmony_ci    return val;
2559596a2c1Sopenharmony_ci}
2569596a2c1Sopenharmony_ci
2579596a2c1Sopenharmony_cinapi_value HolidayManagerAddon::CreateHolidayItem(napi_env env, const HolidayInfoItem &holidayItem)
2589596a2c1Sopenharmony_ci{
2599596a2c1Sopenharmony_ci    napi_value result;
2609596a2c1Sopenharmony_ci    napi_status status = napi_create_object(env, &result);
2619596a2c1Sopenharmony_ci    if (status != napi_ok) {
2629596a2c1Sopenharmony_ci        HILOG_ERROR_I18N("Create Holiday Item object failed.");
2639596a2c1Sopenharmony_ci        return nullptr;
2649596a2c1Sopenharmony_ci    }
2659596a2c1Sopenharmony_ci    status = napi_set_named_property(env, result, "baseName",
2669596a2c1Sopenharmony_ci        VariableConvertor::CreateString(env, holidayItem.baseName));
2679596a2c1Sopenharmony_ci    if (status != napi_ok) {
2689596a2c1Sopenharmony_ci        HILOG_ERROR_I18N("Failed to set element baseName.");
2699596a2c1Sopenharmony_ci        return nullptr;
2709596a2c1Sopenharmony_ci    }
2719596a2c1Sopenharmony_ci    status = napi_set_named_property(env, result, "year",
2729596a2c1Sopenharmony_ci                                     VariableConvertor::CreateNumber(env, holidayItem.year));
2739596a2c1Sopenharmony_ci    if (status != napi_ok) {
2749596a2c1Sopenharmony_ci        HILOG_ERROR_I18N("Failed to set element year.");
2759596a2c1Sopenharmony_ci        return nullptr;
2769596a2c1Sopenharmony_ci    }
2779596a2c1Sopenharmony_ci    status = napi_set_named_property(env, result, "month",
2789596a2c1Sopenharmony_ci                                     VariableConvertor::CreateNumber(env, holidayItem.month));
2799596a2c1Sopenharmony_ci    if (status != napi_ok) {
2809596a2c1Sopenharmony_ci        HILOG_ERROR_I18N("Failed to set element month.");
2819596a2c1Sopenharmony_ci        return nullptr;
2829596a2c1Sopenharmony_ci    }
2839596a2c1Sopenharmony_ci    status = napi_set_named_property(env, result, "day",
2849596a2c1Sopenharmony_ci                                     VariableConvertor::CreateNumber(env, holidayItem.day));
2859596a2c1Sopenharmony_ci    if (status != napi_ok) {
2869596a2c1Sopenharmony_ci        HILOG_ERROR_I18N("Failed to set element day.");
2879596a2c1Sopenharmony_ci        return nullptr;
2889596a2c1Sopenharmony_ci    }
2899596a2c1Sopenharmony_ci    napi_value localNames = HolidayLocalNameItem(env, holidayItem.localNames);
2909596a2c1Sopenharmony_ci    if (localNames != nullptr) {
2919596a2c1Sopenharmony_ci        status = napi_set_named_property(env, result, "localNames", localNames);
2929596a2c1Sopenharmony_ci        if (status != napi_ok) {
2939596a2c1Sopenharmony_ci            HILOG_ERROR_I18N("Failed to set element localNames.");
2949596a2c1Sopenharmony_ci            return nullptr;
2959596a2c1Sopenharmony_ci        }
2969596a2c1Sopenharmony_ci    }
2979596a2c1Sopenharmony_ci    return result;
2989596a2c1Sopenharmony_ci}
2999596a2c1Sopenharmony_ci
3009596a2c1Sopenharmony_cinapi_value HolidayManagerAddon::HolidayLocalNameItem(napi_env env, const std::vector<HolidayLocalName> localNames)
3019596a2c1Sopenharmony_ci{
3029596a2c1Sopenharmony_ci    napi_value result = nullptr;
3039596a2c1Sopenharmony_ci    napi_status status = napi_create_array_with_length(env, localNames.size(), &result);
3049596a2c1Sopenharmony_ci    if (status != napi_ok) {
3059596a2c1Sopenharmony_ci        HILOG_ERROR_I18N("create HolidayLocalName array failed.");
3069596a2c1Sopenharmony_ci        return nullptr;
3079596a2c1Sopenharmony_ci    }
3089596a2c1Sopenharmony_ci    for (size_t i = 0; i < localNames.size(); i++) {
3099596a2c1Sopenharmony_ci        napi_value localNameItem;
3109596a2c1Sopenharmony_ci        status = napi_create_object(env, &localNameItem);
3119596a2c1Sopenharmony_ci        if (status != napi_ok) {
3129596a2c1Sopenharmony_ci            HILOG_ERROR_I18N("Create HolidayLocalName Item object failed.");
3139596a2c1Sopenharmony_ci            return nullptr;
3149596a2c1Sopenharmony_ci        }
3159596a2c1Sopenharmony_ci        status = napi_set_named_property(env, localNameItem, "language",
3169596a2c1Sopenharmony_ci                                         VariableConvertor::CreateString(env, localNames[i].language));
3179596a2c1Sopenharmony_ci        if (status != napi_ok) {
3189596a2c1Sopenharmony_ci            HILOG_ERROR_I18N("Create HolidayLocalName.language Item object failed.");
3199596a2c1Sopenharmony_ci            return nullptr;
3209596a2c1Sopenharmony_ci        }
3219596a2c1Sopenharmony_ci        status = napi_set_named_property(env, localNameItem, "name",
3229596a2c1Sopenharmony_ci                                         VariableConvertor::CreateString(env, localNames[i].name));
3239596a2c1Sopenharmony_ci        if (status != napi_ok) {
3249596a2c1Sopenharmony_ci            HILOG_ERROR_I18N("Create HolidayLocalName.name Item object failed.");
3259596a2c1Sopenharmony_ci            return nullptr;
3269596a2c1Sopenharmony_ci        }
3279596a2c1Sopenharmony_ci        status = napi_set_element(env, result, i, localNameItem);
3289596a2c1Sopenharmony_ci        if (status != napi_ok) {
3299596a2c1Sopenharmony_ci            HILOG_ERROR_I18N("Failed to set HolidayLocalName element.");
3309596a2c1Sopenharmony_ci            return nullptr;
3319596a2c1Sopenharmony_ci        }
3329596a2c1Sopenharmony_ci    }
3339596a2c1Sopenharmony_ci    return result;
3349596a2c1Sopenharmony_ci}
3359596a2c1Sopenharmony_ci} // namespace I18n
3369596a2c1Sopenharmony_ci} // namespace Global
3379596a2c1Sopenharmony_ci} // namespace OHOS