package net.minecraft.datafixer.fix;

import com.mojang.datafixers.DSL;
import com.mojang.datafixers.DataFix;
import com.mojang.datafixers.DataFixUtils;
import com.mojang.datafixers.OpticFinder;
import com.mojang.datafixers.TypeRewriteRule;
import com.mojang.datafixers.Typed;
import com.mojang.datafixers.schemas.Schema;
import com.mojang.datafixers.types.Type;
import com.mojang.datafixers.util.Pair;
import com.mojang.serialization.Dynamic;
import java.util.Objects;
import java.util.Optional;
import net.minecraft.datafixer.TypeReferences;
import net.minecraft.datafixer.schema.IdentifierNormalizingSchema;

public class ItemPotionFix extends DataFix {
	private static final int field_29885 = 16384;
	private static final String[] ID_TO_POTIONS = DataFixUtils.make(new String[128], strings -> {
		strings[0] = "minecraft:water";
		strings[1] = "minecraft:regeneration";
		strings[2] = "minecraft:swiftness";
		strings[3] = "minecraft:fire_resistance";
		strings[4] = "minecraft:poison";
		strings[5] = "minecraft:healing";
		strings[6] = "minecraft:night_vision";
		strings[7] = null;
		strings[8] = "minecraft:weakness";
		strings[9] = "minecraft:strength";
		strings[10] = "minecraft:slowness";
		strings[11] = "minecraft:leaping";
		strings[12] = "minecraft:harming";
		strings[13] = "minecraft:water_breathing";
		strings[14] = "minecraft:invisibility";
		strings[15] = null;
		strings[16] = "minecraft:awkward";
		strings[17] = "minecraft:regeneration";
		strings[18] = "minecraft:swiftness";
		strings[19] = "minecraft:fire_resistance";
		strings[20] = "minecraft:poison";
		strings[21] = "minecraft:healing";
		strings[22] = "minecraft:night_vision";
		strings[23] = null;
		strings[24] = "minecraft:weakness";
		strings[25] = "minecraft:strength";
		strings[26] = "minecraft:slowness";
		strings[27] = "minecraft:leaping";
		strings[28] = "minecraft:harming";
		strings[29] = "minecraft:water_breathing";
		strings[30] = "minecraft:invisibility";
		strings[31] = null;
		strings[32] = "minecraft:thick";
		strings[33] = "minecraft:strong_regeneration";
		strings[34] = "minecraft:strong_swiftness";
		strings[35] = "minecraft:fire_resistance";
		strings[36] = "minecraft:strong_poison";
		strings[37] = "minecraft:strong_healing";
		strings[38] = "minecraft:night_vision";
		strings[39] = null;
		strings[40] = "minecraft:weakness";
		strings[41] = "minecraft:strong_strength";
		strings[42] = "minecraft:slowness";
		strings[43] = "minecraft:strong_leaping";
		strings[44] = "minecraft:strong_harming";
		strings[45] = "minecraft:water_breathing";
		strings[46] = "minecraft:invisibility";
		strings[47] = null;
		strings[48] = null;
		strings[49] = "minecraft:strong_regeneration";
		strings[50] = "minecraft:strong_swiftness";
		strings[51] = "minecraft:fire_resistance";
		strings[52] = "minecraft:strong_poison";
		strings[53] = "minecraft:strong_healing";
		strings[54] = "minecraft:night_vision";
		strings[55] = null;
		strings[56] = "minecraft:weakness";
		strings[57] = "minecraft:strong_strength";
		strings[58] = "minecraft:slowness";
		strings[59] = "minecraft:strong_leaping";
		strings[60] = "minecraft:strong_harming";
		strings[61] = "minecraft:water_breathing";
		strings[62] = "minecraft:invisibility";
		strings[63] = null;
		strings[64] = "minecraft:mundane";
		strings[65] = "minecraft:long_regeneration";
		strings[66] = "minecraft:long_swiftness";
		strings[67] = "minecraft:long_fire_resistance";
		strings[68] = "minecraft:long_poison";
		strings[69] = "minecraft:healing";
		strings[70] = "minecraft:long_night_vision";
		strings[71] = null;
		strings[72] = "minecraft:long_weakness";
		strings[73] = "minecraft:long_strength";
		strings[74] = "minecraft:long_slowness";
		strings[75] = "minecraft:long_leaping";
		strings[76] = "minecraft:harming";
		strings[77] = "minecraft:long_water_breathing";
		strings[78] = "minecraft:long_invisibility";
		strings[79] = null;
		strings[80] = "minecraft:awkward";
		strings[81] = "minecraft:long_regeneration";
		strings[82] = "minecraft:long_swiftness";
		strings[83] = "minecraft:long_fire_resistance";
		strings[84] = "minecraft:long_poison";
		strings[85] = "minecraft:healing";
		strings[86] = "minecraft:long_night_vision";
		strings[87] = null;
		strings[88] = "minecraft:long_weakness";
		strings[89] = "minecraft:long_strength";
		strings[90] = "minecraft:long_slowness";
		strings[91] = "minecraft:long_leaping";
		strings[92] = "minecraft:harming";
		strings[93] = "minecraft:long_water_breathing";
		strings[94] = "minecraft:long_invisibility";
		strings[95] = null;
		strings[96] = "minecraft:thick";
		strings[97] = "minecraft:regeneration";
		strings[98] = "minecraft:swiftness";
		strings[99] = "minecraft:long_fire_resistance";
		strings[100] = "minecraft:poison";
		strings[101] = "minecraft:strong_healing";
		strings[102] = "minecraft:long_night_vision";
		strings[103] = null;
		strings[104] = "minecraft:long_weakness";
		strings[105] = "minecraft:strength";
		strings[106] = "minecraft:long_slowness";
		strings[107] = "minecraft:leaping";
		strings[108] = "minecraft:strong_harming";
		strings[109] = "minecraft:long_water_breathing";
		strings[110] = "minecraft:long_invisibility";
		strings[111] = null;
		strings[112] = null;
		strings[113] = "minecraft:regeneration";
		strings[114] = "minecraft:swiftness";
		strings[115] = "minecraft:long_fire_resistance";
		strings[116] = "minecraft:poison";
		strings[117] = "minecraft:strong_healing";
		strings[118] = "minecraft:long_night_vision";
		strings[119] = null;
		strings[120] = "minecraft:long_weakness";
		strings[121] = "minecraft:strength";
		strings[122] = "minecraft:long_slowness";
		strings[123] = "minecraft:leaping";
		strings[124] = "minecraft:strong_harming";
		strings[125] = "minecraft:long_water_breathing";
		strings[126] = "minecraft:long_invisibility";
		strings[127] = null;
	});
	public static final String WATER = "minecraft:water";

	public ItemPotionFix(Schema outputSchema, boolean changesType) {
		super(outputSchema, changesType);
	}

	@Override
	public TypeRewriteRule makeRule() {
		Type<?> type = this.getInputSchema().getType(TypeReferences.ITEM_STACK);
		OpticFinder<Pair<String, String>> opticFinder = DSL.fieldFinder(
			"id", DSL.named(TypeReferences.ITEM_NAME.typeName(), IdentifierNormalizingSchema.getIdentifierType())
		);
		OpticFinder<?> opticFinder2 = type.findField("tag");
		return this.fixTypeEverywhereTyped(
			"ItemPotionFix",
			type,
			typed -> {
				Optional<Pair<String, String>> optional = typed.getOptional(opticFinder);
				if (optional.isPresent() && Objects.equals(((Pair)optional.get()).getSecond(), "minecraft:potion")) {
					Dynamic<?> dynamic = typed.get(DSL.remainderFinder());
					Optional<? extends Typed<?>> optional2 = typed.getOptionalTyped(opticFinder2);
					short s = dynamic.get("Damage").asShort((short)0);
					if (optional2.isPresent()) {
						Typed<?> typed2 = typed;
						Dynamic<?> dynamic2 = ((Typed)optional2.get()).get(DSL.remainderFinder());
						Optional<String> optional3 = dynamic2.get("Potion").asString().result();
						if (!optional3.isPresent()) {
							String string = ID_TO_POTIONS[s & 127];
							Typed<?> typed3 = ((Typed)optional2.get())
								.set(DSL.remainderFinder(), dynamic2.set("Potion", dynamic2.createString(string == null ? "minecraft:water" : string)));
							typed2 = typed.set(opticFinder2, typed3);
							if ((s & 16384) == 16384) {
								typed2 = typed2.set(opticFinder, Pair.of(TypeReferences.ITEM_NAME.typeName(), "minecraft:splash_potion"));
							}
						}

						if (s != 0) {
							dynamic = dynamic.set("Damage", dynamic.createShort((short)0));
						}

						return typed2.set(DSL.remainderFinder(), dynamic);
					}
				}

				return typed;
			}
		);
	}
}
