1/*
2 * Copyright (C) 2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#ifndef COUNTRY_CODE_H
17#define COUNTRY_CODE_H
18
19#include <parcel.h>
20#include <string>
21
22#include "constant_definition.h"
23#include "country_code.h"
24#include "string_ex.h"
25
26namespace OHOS {
27namespace Location {
28class CountryCode : public Parcelable {
29public:
30    CountryCode()
31    {
32        countryCodeStr_ = "";
33        countryCodeType_ = COUNTRY_CODE_FROM_LOCALE;
34    }
35
36    explicit CountryCode(CountryCode& country)
37    {
38        SetCountryCodeStr(country.GetCountryCodeStr());
39        SetCountryCodeType(country.GetCountryCodeType());
40    }
41
42    ~CountryCode() override = default;
43
44    inline bool IsSame(CountryCode& country) const
45    {
46        return (countryCodeStr_ == country.GetCountryCodeStr()) &&
47            (countryCodeType_ == country.GetCountryCodeType());
48    }
49
50    inline bool IsMoreReliable(int type) const
51    {
52        return (countryCodeType_ > type);
53    }
54
55    inline std::string GetCountryCodeStr() const
56    {
57        return countryCodeStr_;
58    }
59
60    inline void SetCountryCodeStr(std::string country)
61    {
62        countryCodeStr_ = country;
63    }
64
65    inline int GetCountryCodeType() const
66    {
67        return countryCodeType_;
68    }
69
70    inline void SetCountryCodeType(int type)
71    {
72        countryCodeType_ = type;
73    }
74
75    void ReadFromParcel(Parcel& parcel)
76    {
77        countryCodeStr_ = Str16ToStr8(parcel.ReadString16());
78        countryCodeType_ = parcel.ReadInt64();
79    }
80
81    bool Marshalling(Parcel& parcel) const override
82    {
83        return parcel.WriteString16(Str8ToStr16(countryCodeStr_)) &&
84               parcel.WriteInt64(countryCodeType_);
85    }
86
87    static std::shared_ptr<CountryCode> Unmarshalling(Parcel& parcel)
88    {
89        auto country = std::make_shared<CountryCode>();
90        country->ReadFromParcel(parcel);
91        return country;
92    }
93
94    std::string ToString()
95    {
96        std::string str = "countryCodeStr_ : " + countryCodeStr_ +
97            ", countryCodeType_ : " + std::to_string(countryCodeType_);
98        return str;
99    }
100
101private:
102    std::string countryCodeStr_;
103    int countryCodeType_;
104};
105} // namespace Location
106} // namespace OHOS
107#endif // COUNTRY_CODE_H