#ifndef TN_MAP_STYLE_PARAMS_H
#define TN_MAP_STYLE_PARAMS_H

#include <string>

#include <foundation/SharedPtr.h>

#include <foundation/TnTypes.h> //for uint32_t

// Forward declarations, never include engine internals in public files
class  TnMapConf;

/*  NOTE:
    Refrain from putting anything other than smart pointers or concrete
    types in this class.  This will prevent the need for writing copy 
    constructors
 */

enum eTextAlignment
{
    eTextAlignment_LEFT,
    eTextAlignment_CENTER,
    eTextAlignment_RIGHT
};


/*! Transition type for annotations. Only for 3D annotation and billboard
 *  icon so far.
 */
enum eAnnotationTransitionType
{
    eAnnotationTransitionType_Resizing = 0,
    eAnnotationTransitionType_Fading,
    eAnnotationTransitionType_Dropping,
    eAnnotationTransitionType_SIZE
};


enum eTnMapFontStyle
{
    eTnMapFontStyle_Normal,
    eTnMapFontStyle_Bold = 1 << 0,
    eTnMapFontStyle_Italic = 1 << 1,
    eTnMapFontStyle_Bold_Italic = eTnMapFontStyle_Bold | eTnMapFontStyle_Italic,

    //additional new members please above eTnMapFontStyle_Size
    eTnMapFontStyle_Size
};


class TnMapStyleParams
{
public:
    
    // Accessors
    
    //config
    Tn::Foundation::shared_ptr<TnMapConf> const & Config() const;
    
    std::string const &     GetStyleKey() const;
    
    bool Valid() const;
    
    //Set default zoom level
    void SetZoomLevel(uint32_t zoomLevel);
    
protected:
    
    //derived classes responsible for construction
    TnMapStyleParams(Tn::Foundation::shared_ptr<TnMapConf> const & conf,
                     std::string const & style,
                     uint32_t zoomLevel = 0);
    
    //config passed into constructor
    Tn::Foundation::shared_ptr<TnMapConf> config;

    //typical api values
    
    //style key to pull config info
    std::string styleKey;
        
    //internal use only
    uint32_t zoomLevel;
    
};

#endif //TN_MAP_STYLE_PARAMS_H
