/* Copyright 2020, Michele Santullo
 * This file is part of orotool.
 *
 * Orotool is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Orotool is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Orotool.  If not, see <http://www.gnu.org/licenses/>.
 */

#pragma once

#include "datatypes.hpp"
#include <vector>
#include <string>
#include <string_view>
#include <optional>

namespace oro {
	enum class ShopType {
		Unknown,
		Vending,
		Buying
	};

	struct ShopTypeWrapper {
		ShopTypeWrapper() = default;
		ShopTypeWrapper (int val);
		ShopTypeWrapper (const std::string& str);
		ShopTypeWrapper (std::string_view str);
		ShopTypeWrapper& operator= (int val);
		ShopTypeWrapper& operator= (const std::string& str);
		ShopTypeWrapper& operator= (std::string_view str);
		operator ShopType() const {return value;}
		ShopType value {ShopType::Unknown};
	};

	struct Location {
		std::string map;
		int x;
		int y;
	};

	struct ShopItem {
		unsigned int item_id{};
		unsigned int amount{};
		unsigned int price{};
		unsigned int refine{};
		std::vector<unsigned int> cards;
		unsigned int star_crumbs{};
		std::optional<std::string> element;
		std::optional<unsigned int> creator;
		std::optional<bool> beloved;
	};

	struct Shop {
		std::string title;
		std::string owner;
		Location location;
		Timestamp creation_date;
		ShopTypeWrapper type;
		std::vector<ShopItem> items;
	};

	struct Shops : BaseJsonReply {
		std::vector<Shop> shops;
	};
} //namespace oro
