/*
*******************************************************************************
* Copyright (C) 2011-2012, International Business Machines Corporation and    *
* others. All Rights Reserved.                                                *
*******************************************************************************
*/
#ifndef __TZGNAMES_H
#define __TZGNAMES_H

/**
 * \file 
 * \brief C API: Time zone generic names classe
 */

#include "unicode/utypes.h"

#if !UCONFIG_NO_FORMATTING

#include "unicode/locid.h"
#include "unicode/unistr.h"
#include "unicode/tzfmt.h"
#include "unicode/tznames.h"

U_CDECL_BEGIN

typedef enum UTimeZoneGenericNameType {
    UTZGNM_UNKNOWN      = 0x00,
    UTZGNM_LOCATION     = 0x01,
    UTZGNM_LONG         = 0x02,
    UTZGNM_SHORT        = 0x04
} UTimeZoneGenericNameType;

U_CDECL_END

U_NAMESPACE_BEGIN

class TimeZone;
struct TZGNCoreRef;

class U_I18N_API TimeZoneGenericNames : public UMemory {
public:
    virtual ~TimeZoneGenericNames();

    static TimeZoneGenericNames* createInstance(const Locale& locale, UErrorCode& status);

    virtual UBool operator==(const TimeZoneGenericNames& other) const;
    virtual UBool operator!=(const TimeZoneGenericNames& other) const {return !operator==(other);};
    virtual TimeZoneGenericNames* clone() const;

    UnicodeString& getDisplayName(const TimeZone& tz, UTimeZoneGenericNameType type,
                        UDate date, UnicodeString& name) const;

    UnicodeString& getGenericLocationName(const UnicodeString& tzCanonicalID, UnicodeString& name) const;

    int32_t findBestMatch(const UnicodeString& text, int32_t start, uint32_t types,
        UnicodeString& tzID, UTimeZoneFormatTimeType& timeType, UErrorCode& status) const;

private:
    TimeZoneGenericNames();
    TZGNCoreRef* fRef;
};

U_NAMESPACE_END
#endif
#endif
