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

/**
 * \file 
 * \brief C API: Time zone names class
 */
#include "unicode/utypes.h"

#if !UCONFIG_NO_FORMATTING

#include "unicode/uloc.h"
#include "unicode/unistr.h"

U_CDECL_BEGIN

typedef enum UTimeZoneNameType {
    UTZNM_UNKNOWN           = 0x00,
    UTZNM_LONG_GENERIC      = 0x01,
    UTZNM_LONG_STANDARD     = 0x02,
    UTZNM_LONG_DAYLIGHT     = 0x04,
    UTZNM_SHORT_GENERIC     = 0x08,
    UTZNM_SHORT_STANDARD    = 0x10,
    UTZNM_SHORT_DAYLIGHT    = 0x20
} UTimeZoneNameType;

U_CDECL_END

U_NAMESPACE_BEGIN

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

    virtual int32_t size() const = 0;
    virtual UTimeZoneNameType getNameType(int32_t index) const = 0;
    virtual int32_t getMatchLength(int32_t index) const = 0;
    virtual UnicodeString& getTimeZoneID(int32_t index, UnicodeString& tzID) const = 0;
    virtual UnicodeString& getMetaZoneID(int32_t index, UnicodeString& mzID) const = 0;
};

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

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

    virtual StringEnumeration* getAvailableMetaZoneIDs(UErrorCode& status) const = 0;
    virtual StringEnumeration* getAvailableMetaZoneIDs(const UnicodeString& tzID, UErrorCode& status) const = 0;

    virtual UnicodeString& getMetaZoneID(const UnicodeString& tzID, UDate date, UnicodeString& mzID) const = 0;
    virtual UnicodeString& getReferenceZoneID(const UnicodeString& mzID, const char* region, UnicodeString& tzID) const = 0;

    virtual UnicodeString& getMetaZoneDisplayName(const UnicodeString& mzID, UTimeZoneNameType type, UnicodeString& name) const = 0;
    virtual UnicodeString& getTimeZoneDisplayName(const UnicodeString& tzID, UTimeZoneNameType type, UnicodeString& name) const = 0;

    virtual UnicodeString& getExemplarLocationName(const UnicodeString& tzID, UnicodeString& name) const;
    virtual UnicodeString& getDisplayName(const UnicodeString& tzID, UTimeZoneNameType type, UDate date, UnicodeString& name) const;

    virtual TimeZoneNameMatchInfo* find(const UnicodeString& text, int32_t start, uint32_t types, UErrorCode& status) const = 0;
};

U_NAMESPACE_END
#endif
#endif
