// @generated by protoc-gen-es v2.13.0 with parameter "target=ts,import_extension=js"
// @generated from file soulfire/recipe.proto (package soulfire.v1, syntax proto3)
/* eslint-disable */

import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2";
import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2";
import { file_google_api_annotations } from "../google/api/annotations_pb.js";
import { file_google_api_field_behavior } from "../google/api/field_behavior_pb.js";
import { file_soulfire_api_docs } from "./api_docs_pb.js";
import { file_soulfire_bot_live } from "./bot_live_pb.js";
import type { BlockPosition } from "./common_pb.js";
import { file_soulfire_common } from "./common_pb.js";
import type { ItemStackSnapshot } from "./domain_pb.js";
import { file_soulfire_domain } from "./domain_pb.js";
import type { InventoryScope, ItemSelector } from "./inventory_pb.js";
import { file_soulfire_inventory } from "./inventory_pb.js";
import type { Message } from "@bufbuild/protobuf";

/**
 * Describes the file soulfire/recipe.proto.
 */
export const file_soulfire_recipe: GenFile = /*@__PURE__*/
  fileDesc(" ", [file_google_api_annotations, file_google_api_field_behavior, file_soulfire_api_docs, file_soulfire_bot_live, file_soulfire_common, file_soulfire_domain, file_soulfire_inventory]);

/**
 * @generated from message soulfire.v1.IngredientChoice
 */
export type IngredientChoice = Message<"soulfire.v1.IngredientChoice"> & {
  /**
   * @generated from field: repeated string item_ids = 1;
   */
  itemIds: string[];

  /**
   * @generated from field: repeated string tags = 2;
   */
  tags: string[];

  /**
   * @generated from field: int32 count = 3;
   */
  count: number;
};

/**
 * Describes the message soulfire.v1.IngredientChoice.
 * Use `create(IngredientChoiceSchema)` to create a new message.
 */
export const IngredientChoiceSchema: GenMessage<IngredientChoice> = /*@__PURE__*/
  messageDesc(file_soulfire_recipe, 0);

/**
 * @generated from message soulfire.v1.RecipeSnapshot
 */
export type RecipeSnapshot = Message<"soulfire.v1.RecipeSnapshot"> & {
  /**
   * @generated from field: string recipe_id = 1;
   */
  recipeId: string;

  /**
   * @generated from field: string recipe_type = 2;
   */
  recipeType: string;

  /**
   * @generated from field: optional string group = 3;
   */
  group?: string | undefined;

  /**
   * @generated from field: repeated soulfire.v1.IngredientChoice ingredients = 4;
   */
  ingredients: IngredientChoice[];

  /**
   * @generated from field: soulfire.v1.ItemStackSnapshot result = 5;
   */
  result?: ItemStackSnapshot | undefined;

  /**
   * @generated from field: optional float experience = 6;
   */
  experience?: number | undefined;

  /**
   * @generated from field: optional int32 cooking_time_ticks = 7;
   */
  cookingTimeTicks?: number | undefined;

  /**
   * @generated from field: bool special = 8;
   */
  special: boolean;
};

/**
 * Describes the message soulfire.v1.RecipeSnapshot.
 * Use `create(RecipeSnapshotSchema)` to create a new message.
 */
export const RecipeSnapshotSchema: GenMessage<RecipeSnapshot> = /*@__PURE__*/
  messageDesc(file_soulfire_recipe, 1);

/**
 * @generated from message soulfire.v1.ListRecipesRequest
 */
export type ListRecipesRequest = Message<"soulfire.v1.ListRecipesRequest"> & {
  /**
   * @generated from field: optional string result_item_id = 1;
   */
  resultItemId?: string | undefined;

  /**
   * @generated from field: optional soulfire.v1.ItemSelector ingredient = 2;
   */
  ingredient?: ItemSelector | undefined;

  /**
   * @generated from field: repeated string recipe_types = 3;
   */
  recipeTypes: string[];

  /**
   * @generated from field: uint32 page_size = 4;
   */
  pageSize: number;

  /**
   * @generated from field: string page_token = 5;
   */
  pageToken: string;

  /**
   * @generated from field: soulfire.v1.InventoryScope scope = 6;
   */
  scope?: InventoryScope | undefined;
};

/**
 * Describes the message soulfire.v1.ListRecipesRequest.
 * Use `create(ListRecipesRequestSchema)` to create a new message.
 */
export const ListRecipesRequestSchema: GenMessage<ListRecipesRequest> = /*@__PURE__*/
  messageDesc(file_soulfire_recipe, 2);

/**
 * @generated from message soulfire.v1.ListRecipesResponse
 */
export type ListRecipesResponse = Message<"soulfire.v1.ListRecipesResponse"> & {
  /**
   * @generated from field: repeated soulfire.v1.RecipeSnapshot recipes = 1;
   */
  recipes: RecipeSnapshot[];

  /**
   * @generated from field: string next_page_token = 2;
   */
  nextPageToken: string;

  /**
   * @generated from field: string registry_hash = 3;
   */
  registryHash: string;
};

/**
 * Describes the message soulfire.v1.ListRecipesResponse.
 * Use `create(ListRecipesResponseSchema)` to create a new message.
 */
export const ListRecipesResponseSchema: GenMessage<ListRecipesResponse> = /*@__PURE__*/
  messageDesc(file_soulfire_recipe, 3);

/**
 * @generated from message soulfire.v1.CanCraftRequest
 */
export type CanCraftRequest = Message<"soulfire.v1.CanCraftRequest"> & {
  /**
   * @generated from field: soulfire.v1.InventoryScope scope = 1;
   */
  scope?: InventoryScope | undefined;

  /**
   * @generated from field: string recipe_id = 2;
   */
  recipeId: string;

  /**
   * @generated from field: int32 count = 3;
   */
  count: number;
};

/**
 * Describes the message soulfire.v1.CanCraftRequest.
 * Use `create(CanCraftRequestSchema)` to create a new message.
 */
export const CanCraftRequestSchema: GenMessage<CanCraftRequest> = /*@__PURE__*/
  messageDesc(file_soulfire_recipe, 4);

/**
 * @generated from message soulfire.v1.MissingIngredient
 */
export type MissingIngredient = Message<"soulfire.v1.MissingIngredient"> & {
  /**
   * @generated from field: soulfire.v1.IngredientChoice ingredient = 1;
   */
  ingredient?: IngredientChoice | undefined;

  /**
   * @generated from field: int32 available = 2;
   */
  available: number;

  /**
   * @generated from field: int32 missing = 3;
   */
  missing: number;
};

/**
 * Describes the message soulfire.v1.MissingIngredient.
 * Use `create(MissingIngredientSchema)` to create a new message.
 */
export const MissingIngredientSchema: GenMessage<MissingIngredient> = /*@__PURE__*/
  messageDesc(file_soulfire_recipe, 5);

/**
 * @generated from message soulfire.v1.CanCraftResponse
 */
export type CanCraftResponse = Message<"soulfire.v1.CanCraftResponse"> & {
  /**
   * @generated from field: bool can_craft = 1;
   */
  canCraft: boolean;

  /**
   * @generated from field: int32 maximum_craft_count = 2;
   */
  maximumCraftCount: number;

  /**
   * @generated from field: repeated soulfire.v1.MissingIngredient missing = 3;
   */
  missing: MissingIngredient[];

  /**
   * @generated from field: optional string required_station = 4;
   */
  requiredStation?: string | undefined;
};

/**
 * Describes the message soulfire.v1.CanCraftResponse.
 * Use `create(CanCraftResponseSchema)` to create a new message.
 */
export const CanCraftResponseSchema: GenMessage<CanCraftResponse> = /*@__PURE__*/
  messageDesc(file_soulfire_recipe, 6);

/**
 * @generated from message soulfire.v1.CraftTask
 */
export type CraftTask = Message<"soulfire.v1.CraftTask"> & {
  /**
   * Recipe display ID returned by ListRecipes, such as "display:42".
   *
   * @generated from field: string recipe_id = 1;
   */
  recipeId: string;

  /**
   * Number of recipe operations to perform, not the number of output items.
   *
   * @generated from field: int32 count = 2;
   */
  count: number;

  /**
   * Required for recipes that need a crafting table unless one is already open.
   *
   * @generated from field: optional soulfire.v1.BlockPosition station = 3;
   */
  station?: BlockPosition | undefined;
};

/**
 * Describes the message soulfire.v1.CraftTask.
 * Use `create(CraftTaskSchema)` to create a new message.
 */
export const CraftTaskSchema: GenMessage<CraftTask> = /*@__PURE__*/
  messageDesc(file_soulfire_recipe, 7);

/**
 * @generated from message soulfire.v1.CraftTaskResult
 */
export type CraftTaskResult = Message<"soulfire.v1.CraftTaskResult"> & {
  /**
   * @generated from field: soulfire.v1.ItemStackSnapshot result = 1;
   */
  result?: ItemStackSnapshot | undefined;

  /**
   * Number of recipe operations completed.
   *
   * @generated from field: int32 crafted = 2;
   */
  crafted: number;
};

/**
 * Describes the message soulfire.v1.CraftTaskResult.
 * Use `create(CraftTaskResultSchema)` to create a new message.
 */
export const CraftTaskResultSchema: GenMessage<CraftTaskResult> = /*@__PURE__*/
  messageDesc(file_soulfire_recipe, 8);

/**
 * @generated from message soulfire.v1.SmeltTask
 */
export type SmeltTask = Message<"soulfire.v1.SmeltTask"> & {
  /**
   * Selects inventory items accepted by a known cooking recipe.
   *
   * @generated from field: soulfire.v1.ItemSelector input = 1;
   */
  input?: ItemSelector | undefined;

  /**
   * Number of input items to cook.
   *
   * @generated from field: int32 count = 2;
   */
  count: number;

  /**
   * Optional fuel restriction. SoulFire otherwise selects any valid fuel.
   *
   * @generated from field: optional soulfire.v1.ItemSelector fuel = 3;
   */
  fuel?: ItemSelector | undefined;

  /**
   * Required unless a compatible furnace menu is already open.
   *
   * @generated from field: optional soulfire.v1.BlockPosition station = 4;
   */
  station?: BlockPosition | undefined;
};

/**
 * Describes the message soulfire.v1.SmeltTask.
 * Use `create(SmeltTaskSchema)` to create a new message.
 */
export const SmeltTaskSchema: GenMessage<SmeltTask> = /*@__PURE__*/
  messageDesc(file_soulfire_recipe, 9);

/**
 * @generated from message soulfire.v1.SmeltTaskResult
 */
export type SmeltTaskResult = Message<"soulfire.v1.SmeltTaskResult"> & {
  /**
   * Output stacks collected from each completed cooking operation.
   *
   * @generated from field: repeated soulfire.v1.ItemStackSnapshot outputs = 1;
   */
  outputs: ItemStackSnapshot[];
};

/**
 * Describes the message soulfire.v1.SmeltTaskResult.
 * Use `create(SmeltTaskResultSchema)` to create a new message.
 */
export const SmeltTaskResultSchema: GenMessage<SmeltTaskResult> = /*@__PURE__*/
  messageDesc(file_soulfire_recipe, 10);

/**
 * @generated from message soulfire.v1.BrewTask
 */
export type BrewTask = Message<"soulfire.v1.BrewTask"> & {
  /**
   * Selects potion bottles accepted as input by the requested ingredient.
   *
   * @generated from field: soulfire.v1.ItemSelector input = 1;
   */
  input?: ItemSelector | undefined;

  /**
   * Selects the brewing ingredient to consume for each bottle.
   *
   * @generated from field: soulfire.v1.ItemSelector ingredient = 2;
   */
  ingredient?: ItemSelector | undefined;

  /**
   * Number of individual bottles to brew.
   *
   * @generated from field: int32 count = 3;
   */
  count: number;

  /**
   * Optional fuel restriction. SoulFire otherwise selects blaze powder.
   *
   * @generated from field: optional soulfire.v1.ItemSelector fuel = 4;
   */
  fuel?: ItemSelector | undefined;

  /**
   * Required unless a brewing stand menu is already open.
   *
   * @generated from field: optional soulfire.v1.BlockPosition station = 5;
   */
  station?: BlockPosition | undefined;

  /**
   * Refuses to brew when the predicted output no longer matches this selector.
   *
   * @generated from field: optional soulfire.v1.ItemSelector expected_result = 6;
   */
  expectedResult?: ItemSelector | undefined;
};

/**
 * Describes the message soulfire.v1.BrewTask.
 * Use `create(BrewTaskSchema)` to create a new message.
 */
export const BrewTaskSchema: GenMessage<BrewTask> = /*@__PURE__*/
  messageDesc(file_soulfire_recipe, 11);

/**
 * @generated from message soulfire.v1.BrewTaskResult
 */
export type BrewTaskResult = Message<"soulfire.v1.BrewTaskResult"> & {
  /**
   * Finished potion stacks collected from the brewing stand.
   *
   * @generated from field: repeated soulfire.v1.ItemStackSnapshot outputs = 1;
   */
  outputs: ItemStackSnapshot[];
};

/**
 * Describes the message soulfire.v1.BrewTaskResult.
 * Use `create(BrewTaskResultSchema)` to create a new message.
 */
export const BrewTaskResultSchema: GenMessage<BrewTaskResult> = /*@__PURE__*/
  messageDesc(file_soulfire_recipe, 12);

/**
 * One offer in the merchant menu currently open for the bot.
 *
 * @generated from message soulfire.v1.VillagerTradeOfferSnapshot
 */
export type VillagerTradeOfferSnapshot = Message<"soulfire.v1.VillagerTradeOfferSnapshot"> & {
  /**
   * @generated from field: uint32 offer_index = 1;
   */
  offerIndex: number;

  /**
   * @generated from field: soulfire.v1.ItemStackSnapshot first_cost = 2;
   */
  firstCost?: ItemStackSnapshot | undefined;

  /**
   * @generated from field: optional soulfire.v1.ItemStackSnapshot second_cost = 3;
   */
  secondCost?: ItemStackSnapshot | undefined;

  /**
   * @generated from field: soulfire.v1.ItemStackSnapshot result = 4;
   */
  result?: ItemStackSnapshot | undefined;

  /**
   * @generated from field: int32 uses = 5;
   */
  uses: number;

  /**
   * @generated from field: int32 maximum_uses = 6;
   */
  maximumUses: number;

  /**
   * @generated from field: bool out_of_stock = 7;
   */
  outOfStock: boolean;

  /**
   * @generated from field: bool rewards_experience = 8;
   */
  rewardsExperience: boolean;

  /**
   * @generated from field: int32 villager_experience = 9;
   */
  villagerExperience: number;

  /**
   * @generated from field: int32 demand = 10;
   */
  demand: number;

  /**
   * @generated from field: int32 special_price = 11;
   */
  specialPrice: number;

  /**
   * @generated from field: float price_multiplier = 12;
   */
  priceMultiplier: number;
};

/**
 * Describes the message soulfire.v1.VillagerTradeOfferSnapshot.
 * Use `create(VillagerTradeOfferSnapshotSchema)` to create a new message.
 */
export const VillagerTradeOfferSnapshotSchema: GenMessage<VillagerTradeOfferSnapshot> = /*@__PURE__*/
  messageDesc(file_soulfire_recipe, 13);

/**
 * @generated from message soulfire.v1.ListVillagerTradesRequest
 */
export type ListVillagerTradesRequest = Message<"soulfire.v1.ListVillagerTradesRequest"> & {
  /**
   * @generated from field: soulfire.v1.InventoryScope scope = 1;
   */
  scope?: InventoryScope | undefined;
};

/**
 * Describes the message soulfire.v1.ListVillagerTradesRequest.
 * Use `create(ListVillagerTradesRequestSchema)` to create a new message.
 */
export const ListVillagerTradesRequestSchema: GenMessage<ListVillagerTradesRequest> = /*@__PURE__*/
  messageDesc(file_soulfire_recipe, 14);

/**
 * @generated from message soulfire.v1.ListVillagerTradesResponse
 */
export type ListVillagerTradesResponse = Message<"soulfire.v1.ListVillagerTradesResponse"> & {
  /**
   * @generated from field: repeated soulfire.v1.VillagerTradeOfferSnapshot offers = 1;
   */
  offers: VillagerTradeOfferSnapshot[];

  /**
   * @generated from field: int32 villager_level = 2;
   */
  villagerLevel: number;

  /**
   * @generated from field: int32 villager_experience = 3;
   */
  villagerExperience: number;

  /**
   * @generated from field: bool can_restock = 4;
   */
  canRestock: boolean;

  /**
   * @generated from field: int32 container_id = 5;
   */
  containerId: number;

  /**
   * @generated from field: int32 container_revision = 6;
   */
  containerRevision: number;
};

/**
 * Describes the message soulfire.v1.ListVillagerTradesResponse.
 * Use `create(ListVillagerTradesResponseSchema)` to create a new message.
 */
export const ListVillagerTradesResponseSchema: GenMessage<ListVillagerTradesResponse> = /*@__PURE__*/
  messageDesc(file_soulfire_recipe, 15);

/**
 * @generated from message soulfire.v1.VillagerTradeTask
 */
export type VillagerTradeTask = Message<"soulfire.v1.VillagerTradeTask"> & {
  /**
   * Zero-based index from ListVillagerTrades.
   *
   * @generated from field: uint32 offer_index = 1;
   */
  offerIndex: number;

  /**
   * Exact number of individual trades to execute.
   *
   * @generated from field: int32 count = 2;
   */
  count: number;

  /**
   * Refuses to trade if the selected offer no longer has this result.
   *
   * @generated from field: optional soulfire.v1.ItemSelector expected_result = 3;
   */
  expectedResult?: ItemSelector | undefined;

  /**
   * Close the merchant menu after a successful task.
   *
   * @generated from field: bool close_when_done = 4;
   */
  closeWhenDone: boolean;
};

/**
 * Describes the message soulfire.v1.VillagerTradeTask.
 * Use `create(VillagerTradeTaskSchema)` to create a new message.
 */
export const VillagerTradeTaskSchema: GenMessage<VillagerTradeTask> = /*@__PURE__*/
  messageDesc(file_soulfire_recipe, 16);

/**
 * @generated from message soulfire.v1.VillagerTradeTaskResult
 */
export type VillagerTradeTaskResult = Message<"soulfire.v1.VillagerTradeTaskResult"> & {
  /**
   * @generated from field: repeated soulfire.v1.ItemStackSnapshot outputs = 1;
   */
  outputs: ItemStackSnapshot[];

  /**
   * @generated from field: int32 completed_trades = 2;
   */
  completedTrades: number;
};

/**
 * Describes the message soulfire.v1.VillagerTradeTaskResult.
 * Use `create(VillagerTradeTaskResultSchema)` to create a new message.
 */
export const VillagerTradeTaskResultSchema: GenMessage<VillagerTradeTaskResult> = /*@__PURE__*/
  messageDesc(file_soulfire_recipe, 17);

/**
 * @generated from service soulfire.v1.RecipeService
 */
export const RecipeService: GenService<{
  /**
   * @generated from rpc soulfire.v1.RecipeService.ListRecipes
   */
  listRecipes: {
    methodKind: "unary";
    input: typeof ListRecipesRequestSchema;
    output: typeof ListRecipesResponseSchema;
  },
  /**
   * @generated from rpc soulfire.v1.RecipeService.CanCraft
   */
  canCraft: {
    methodKind: "unary";
    input: typeof CanCraftRequestSchema;
    output: typeof CanCraftResponseSchema;
  },
  /**
   * @generated from rpc soulfire.v1.RecipeService.ListVillagerTrades
   */
  listVillagerTrades: {
    methodKind: "unary";
    input: typeof ListVillagerTradesRequestSchema;
    output: typeof ListVillagerTradesResponseSchema;
  },
}> = /*@__PURE__*/
  serviceDesc(file_soulfire_recipe, 0);
