/**
 * OpenAPI Petstore
 * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters.
 *
 * The version of the OpenAPI document: 1.0.0
 * 
 *
 * NOTE: This class is auto generated by OpenAPI-Generator unset.
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

/*
 * Pet.h
 *
 * A pet for sale in the pet store
 */

#ifndef Pet_H_
#define Pet_H_



#include "Tag.h"
#include <string>
#include "Category.h"
#include <vector>
#include <memory>
#include <vector>
#include <array>
#include <boost/property_tree/ptree.hpp>

namespace org {
namespace openapitools {
namespace server {
namespace model {

/// <summary>
/// A pet for sale in the pet store
/// </summary>
class  Pet 
{
public:
    Pet() = default;
    explicit Pet(boost::property_tree::ptree const& pt);
    virtual ~Pet() = default;

    std::string toJsonString(bool prettyJson = false);
    void fromJsonString(std::string const& jsonString);
    boost::property_tree::ptree toPropertyTree();
    void fromPropertyTree(boost::property_tree::ptree const& pt);

    /////////////////////////////////////////////
    /// Pet members

    /// <summary>
    /// 
    /// </summary>
    int64_t getId() const;
    void setId(int64_t value);

    /// <summary>
    /// 
    /// </summary>
    std::shared_ptr<Category> getCategory() const;
    void setCategory(std::shared_ptr<Category> value);

    /// <summary>
    /// 
    /// </summary>
    std::string getName() const;
    void setName(std::string value);

    /// <summary>
    /// 
    /// </summary>
    std::vector<std::string> getPhotoUrls() const;
    void setPhotoUrls(std::vector<std::string> value);

    /// <summary>
    /// 
    /// </summary>
    std::vector<std::shared_ptr<Tag>> getTags() const;
    void setTags(std::vector<std::shared_ptr<Tag>> value);

    /// <summary>
    /// pet status in the store
    /// </summary>
    std::string getStatus() const;
    void setStatus(std::string value);

protected:
    //////////////////////////////////////
    // Override these for customization //
    //////////////////////////////////////

    virtual std::string toJsonString_internal(bool prettyJson = false);
    virtual void fromJsonString_internal(std::string const& jsonString);
    virtual boost::property_tree::ptree toPropertyTree_internal();
    virtual void fromPropertyTree_internal(boost::property_tree::ptree const& pt);


protected:
    int64_t m_Id = 0L;
    std::shared_ptr<Category> m_Category;
    std::string m_Name = "";
    std::vector<std::string> m_PhotoUrls;
    std::vector<std::shared_ptr<Tag>> m_Tags;
    std::string m_Status = "";
    const std::array<std::string, 3> m_StatusEnum = {
          "available","pending","sold"
    };

};

std::vector<Pet> createPetVectorFromJsonString(const std::string& json);

}
}
}
}

#endif /* Pet_H_ */
