#ifndef BIERGARTEN_PIPELINE_INCLUDES_DATA_MODEL_GENERATED_MODELS_H_
#define BIERGARTEN_PIPELINE_INCLUDES_DATA_MODEL_GENERATED_MODELS_H_

/**
 * @file data_model/generated_models.h
 * @brief Generated output models from the pipeline: brewery/user results,
 * enriched data, and complete generation results.
 */

#include <string>

#include "data_model/models.h"

// ============================================================================
// Generation Output Models
// ============================================================================

/**
 * @brief Generated brewery payload.
 */
struct BreweryResult {
  /**
   * @brief Brewery display name in English.
   */
  std::string name_en;

  /**
   * @brief Brewery description text in English.
   */
  std::string description_en;

  /**
   * @brief Brewery display name in the local language.
   */
  std::string name_local;

  /**
   * @brief Brewery description text in the local language.
   */
  std::string description_local;
};

/**
 * @brief Generated user profile payload.
 */
struct UserResult {
  /**
   * @brief First (given) name, copied from the sampled Name -- not
   * LLM-invented.
   */
  std::string first_name{};

  /**
   * @brief Last (family) name, copied from the sampled Name -- not
   * LLM-invented.
   */
  std::string last_name{};

  /**
   * @brief Gender associated with the sampled first name, copied from the
   * sampled Name -- not LLM-invented.
   */
  std::string gender{};

  /**
   * @brief Username handle.
   */
  std::string username{};

  /**
   * @brief Short user biography.
   */
  std::string bio{};

  /**
   * @brief Relative check-in/activity weight for this user, used to drive
   * a J-curve activity profile in later pipeline phases.
   */
  float activity_weight{};
};

// ============================================================================
// Pipeline Data Models
// ============================================================================

/**
 * @brief Enriched city data with Wikipedia context.
 */
struct EnrichedCity {
  Location location;
  std::string region_context{};
};

/**
 * @brief Helper struct to store generated brewery data.
 */
struct BreweryRecord {
  Location location;
  BreweryResult brewery;
};

/**
 * @brief Helper struct to store generated user data.
 *
 * `email` and `date_of_birth` are programmatically generated by the
 * orchestrator (never LLM-authored) so a downstream auth-account seeding
 * consumer can register real accounts from the pipeline's SQLite export.
 */
struct UserRecord {
  Location location;
  UserResult user;
  std::string email{};
  std::string date_of_birth{};
};

#endif  // BIERGARTEN_PIPELINE_INCLUDES_DATA_MODEL_GENERATED_MODELS_H_
