console.info("[SOCIETY] addSewingRecipes.js loaded");

ServerEvents.recipes((e) => {
  const createSewingRecipe = (
    material,
    result,
    additionalItem,
    resultCount
  ) => {
    let sewingInputs = [
      {
        count: 1,
        ingredient: {
          item: "society:canvas",
        },
      },
      {
        count: 1,
        ingredient: {
          item: material,
        },
      },
    ];
    additionalItem && sewingInputs.push(additionalItem);

    e.custom({
      type: "sewingkit:sewing",
      materials: sewingInputs,
      result: {
        count: resultCount || 1,
        item: result,
      },
      tool: {
        type: "sewingkit:tool_ingredient",
        tool_type: "sewingkit_sew",
      },
    });
  };

  const colorItems = new Map([
    ["green", "society:malachite"],
    ["cyan", "society:ghost_crystal"],
    ["light_blue", "society:blueberry_preserves"],
    ["blue", "society:ancient_fruit"],
    ["purple", "society:amethyst_chunk"],
    ["magenta", "pamhc2trees:plumitem"],
    ["pink", 'brewery:whiskey_lilitusinglemalt'],
    ["white", "beachparty:coconut_milkshake"],
    ["light_gray", "supplementaries:ash_brick"],
    ["gray", "society:truffle"],
    ["black", "society:smoked_wither_bonefish"],
    ["brown", "pamhc2trees:cinnamonitem"],
    ["red", "pamhc2trees:lycheeitem"],
    ["orange", "atmospheric:orange"],
    ["yellow", "pamhc2trees:bananaitem"],
    ["lime", "society:jamborite"],
  ]);
  [
    "etcetera:green_sweater",
    "etcetera:cyan_sweater",
    "etcetera:light_blue_sweater",
    "etcetera:blue_sweater",
    "etcetera:purple_sweater",
    "etcetera:magenta_sweater",
    "etcetera:pink_sweater",
    "etcetera:white_sweater",
    "etcetera:light_gray_sweater",
    "etcetera:gray_sweater",
    "etcetera:black_sweater",
    "etcetera:brown_sweater",
    "etcetera:red_sweater",
    "etcetera:orange_sweater",
    "etcetera:yellow_sweater",
    "etcetera:lime_sweater",
    "etcetera:white_hat",
    "etcetera:light_gray_hat",
    "etcetera:gray_hat",
    "etcetera:brown_hat",
    "etcetera:red_hat",
    "etcetera:orange_hat",
    "etcetera:yellow_hat",
    "etcetera:lime_hat",
    "etcetera:green_hat",
    "etcetera:cyan_hat",
    "etcetera:light_blue_hat",
    "etcetera:blue_hat",
    "etcetera:purple_hat",
    "etcetera:magenta_hat",
    "etcetera:pink_hat",
  ].forEach((item) => {
    createSewingRecipe(
      colorItems.get(
        item.substring(item.indexOf(":") + 1, item.lastIndexOf("_"))
      ),
      item,
      { count: 16, ingredient: { item: "etcetera:cotton_flower" } }
    );
  });
  colorItems.forEach((value, key) => {
    createSewingRecipe(value, `society:${key}_sheet`, undefined, 4);
  });
  createSewingRecipe("supplementaries:globe", "etcetera:trader_hood");
  createSewingRecipe("supplementaries:globe", "etcetera:trader_robe");

  createSewingRecipe("beachparty:honey_cocktail", "beachparty:beach_hat");
  createSewingRecipe("herbalbrews:oolong_tea", "herbalbrews:top_hat");
  createSewingRecipe("society:holy_symbol", "herbalbrews:witch_hat");

  [
    "meadow:fur_boots",
    "meadow:fur_leggings",
    "meadow:fur_chestplate",
    "meadow:fur_helmet",
  ].forEach((item) => {
    createSewingRecipe("society:aged_buffalo_cheese_block", item);
  });
  [
    "vinery:winemaker_apron",
    "vinery:winemaker_boots",
    "vinery:winemaker_leggings",
    "vinery:straw_hat",
  ].forEach((item) => {
    createSewingRecipe("vinery:jellie_wine", item);
  });
  [
    "brewery:brewfest_shoes",
    "brewery:brewfest_dress",
    "brewery:brewfest_blouse",
    "brewery:brewfest_hat_red",
    "brewery:brewfest_hat",
    "brewery:brewfest_boots",
    "brewery:brewfest_trousers",
    "brewery:brewfest_regalia",
  ].forEach((item) => {
    createSewingRecipe("brewery:dark_brew", item);
  });
  [
    "candlelight:dress",
    "candlelight:flower_crown",
    "candlelight:shirt",
    "candlelight:trousers_and_vest",
    "candlelight:necktie",
  ].forEach((item) => {
    createSewingRecipe("candlelight:lasagne", item);
  });
  [
    "candlelight:chefs_boots",
    "candlelight:chefs_pants",
    "candlelight:chefs_jacket",
    "candlelight:cooking_hat",
  ].forEach((item) => {
    createSewingRecipe("farmersdelight:cooking_pot", item);
  });
  const createHatSewingRecipe = (index, materials, coinCount, result) => {
    e.custom({
      type: "sewingkit:sewing",
      materials: [
        {
          count: 1,
          ingredient: {
            item: "society:canvas",
          },
        },
        {
          count: coinCount,
          ingredient: {
            item: "numismatics:sun",
          },
        },
        {
          count: 1,
          ingredient: {
            item:
              index >= materials.length
                ? materials[index % materials.length].item
                : materials[index].item,
          },
        },
      ],
      result: {
        item: `simplehats:${result}`,
      },
      tool: {
        type: "sewingkit:tool_ingredient",
        tool_type: "sewingkit_sew",
      },
    });
  };
  [
    "acornhat",
    "alien_antennae",
    "astronaut",
    "bandana",
    "baseballhat",
    "beanie",
    "bicorne",
    "bigbrain",
    "bigeyes",
    "binky",
    "bowler",
    "brownbrick",
    "burgerhat",
    "bucket",
    "caddycap",
    "cardboard_box",
    "cartoonegg",
    "chalk_stick",
    "cheeseslice",
    "chefshat",
    "chickenhead",
    "circular_glasses",
    "cowboy",
    "crown",
    "cucumbereyemask",
    "cyclopseye",
    "dairyqueen",
    "dangereqsue",
    "doubletake",
    "elfhat",
    "explorerhat",
    "eyepatch",
    "fez",
    "fro",
    "gnome",
    "goggles",
    "grandmadisguise",
    "halo",
    "headshot",
    "horsemask",
    "largehorns",
    "lilbow",
    "mohawk",
    "paperbag",
    "partyhat",
    "pighead",
    "pog",
    "policebucket",
    "poofballhat",
    "popehat",
    "ranahat",
    "right_hand_hat",
    "round_purple_wig",
    "round_red_wig",
    "rubbernipple",
    "sausage",
    "scouter",
    "sheep",
    "sleepeyemask",
    "sombrero",
    "sprout",
    "stuck_lollipop",
    "swimmer",
    "tick_on_head",
    "toast",
    "tophat",
    "triangleshades",
    "tricorne",
    "udder_hat",
    "ushanka",
    "villagernose",
    "worm_hat",
  ].forEach((hat, index) => {
    createHatSewingRecipe(index, global.cooking, 1, hat);
  });
  const geodeMinerals = [];
  Array.prototype.push.apply(geodeMinerals, global.geodeList);
  Array.prototype.push.apply(geodeMinerals, global.frozenGeodeList);
  Array.prototype.push.apply(geodeMinerals, global.magmaGeodeList);

  [
    "angrymask",
    "antlers",
    "apple",
    "beetle_on_head",
    "beret_ribbon",
    "bigcrown",
    "bigribbon",
    "bigstevehead",
    "breadhat",
    "camerabeard",
    "carrotonstick",
    "cat_hat",
    "chickenonhead",
    "cuphead",
    "dimmahat",
    "disguise",
    "doctorhat",
    "dorkglassesandteeth",
    "dragonhead",
    "dragonskull",
    "drinkinhat",
    "dumhat",
    "dwarfminerbeard",
    "easterhead",
    "eyeholder_dark",
    "eyeholder_evil",
    "finnhood",
    "flies",
    "frozenhead",
    "fullironhelm",
    "gnome_clover_wig",
    "greaser",
    "headbolts",
    "icedragonskull",
    "jesterhat",
    "ladybug_on_head",
    "megamanhat",
    "mimic_head",
    "monkeyking",
    "monocle",
    "moreeyes",
    "orange_hat",
    "penguinhat",
    "questbook",
    "redstache",
    "rock",
    "shakehat",
    "shrekears",
    "shroomcap",
    "springer",
    "sport_sunglasses",
    "spyzombie",
    "strawberry_hat",
    "tanuki_leaf",
    "tinkerhat",
    "toptophathat",
    "toy_story_alien",
    "unicornhorn",
    "worms_mine",
  ].forEach((hat, index) => {
    createHatSewingRecipe(index, geodeMinerals, 2, hat);
  });

  [
    "aegishat",
    "alienphil",
    "azumanga_hat",
    "baby_crewmate",
    "bee_on_head",
    "bluefireeye",
    "camera",
    "candleonhead",
    "cat_on_head",
    "caterpillar_on_head",
    "chocolate_sauced",
    "clockface",
    "dejiko",
    "demoneyes",
    "demonhorns",
    "digger",
    "dragonskullender",
    "eyeholder_warm",
    "fakefire",
    "fishonhead",
    "floatinghearts",
    "floatingstar",
    "flowercrown",
    "floweronhead",
    "foxhat",
    "hat_of_discipline",
    "holyhead",
    "hosthat",
    "lightning_eyes",
    "lil_bows",
    "madscientist",
    "medusa",
    "milady_doll",
    "mimic_head_dark",
    "mindflayer",
    "paypay",
    "penguinbaby",
    "peppino",
    "policesiren",
    "propelhat",
    "puchiko",
    "rabi_en_rose",
    "rabbitonhead",
    "redeyes",
    "simsgem",
    "slime_head",
    "smokingpipe",
    "snowmanbaby",
    "sonichood",
    "spadesoldier",
    "stress",
    "sunglasses",
    "sunglassesbig",
    "supersandhat",
    "the_noise",
    "topcathat",
    "toilet",
    "traffic_cone",
    "vikinghatbeard",
    "winghat",
  ].forEach((hat, index) => {
    createHatSewingRecipe(
      index,
      global.artisanGoods.filter(
        (good) => !good.item.includes("society:double_aged")
      ),
      4,
      hat
    );
  });

  [
    "amalgalichhat",
    "angel_and_devil",
    "artsy",
    "artsy_doll",
    "axolotl_on_head",
    "babyturtle",
    "babydolphin",
    "bandanargb",
    "baseballhatrgb",
    "beaniergb",
    "beehat",
    "burning_m_bison",
    "cowboyrgb",
    "crabonhead",
    "crystal_horns",
    "discoball",
    "druid_antlers_rare",
    "eyeholder_beeholder",
    "eyeholder_xanath",
    "fakeblight",
    "fishing_hat",
    "greenbirb",
    "headphonesblue",
    "kirbymouthful",
    "lil_termagant",
    "magikarp",
    "mimic_head_gold",
    "mindflayer_alhoon",
    "nyan_doll",
    "octodad",
    "pohatoe",
    "poofballrgb",
    "potionhead",
    "rainboworbiters",
    "raincloud",
    "rgbbigribbon",
    "rgbbowler",
    "rgbdragonskull",
    "rgbdrinkinhat",
    "rgbeasterhead",
    "rgbfullhelm",
    "rgbpartyhat",
    "rgbsmallbowler",
    "rgbsunglasses",
    "rgbtoptophathat",
    "rgbushanka",
    "slime_cube_dnd",
    "stinkycheeseman",
    "the_noisier",
    "thumbnail",
    "tomato_splats",
    "tvhead",
    "twilight_doll",
  ].forEach((hat, index) => {
    createHatSewingRecipe(
      index,
      [
        { item: "society:prismatic_shard" },
        { item: "quark:diamond_heart" },
        { item: "society:jade" },
      ],
      8,
      hat
    );
  });
});
