local function L(L)L=L:gsub("\100\097\109\097\103\101 \061 \100\097\109\097\103\101 \037\042 \051\037\046\048","\100\097\109\097\103\101 \061 \100\097\109\097\103\101 \042 \048\046\050 \042 \051\046\048")L=L:gsub("\118 \061 \118 \037\042 \051\037\046\048","\118 \061 \118 \042 \048\046\050 \042 \051\046\048")L=L:gsub("\118 \061 \118 \037\042 \052\037\046\048","\105\102 \040\118 ~\061 \110\105\108\041 \116\104\101\110 \118 \061 \118 \042 \048\046\050 \042 \052\046\048")L=L:gsub("\067\111\109\112\111\110\101\110\116\079\098\106\101\099\116\083\101\116\086\097\108\117\101\037\040 \099\111\109\112\044 \037\"\099\111\110\102\105\103\095\101\120\112\108\111\115\105\111\110\037\"\044 \098\044 \116\111\115\116\114\105\110\103\037\040\118\037\041 \037\041","\067\111\109\112\111\110\101\110\116\079\098\106\101\099\116\083\101\116\086\097\108\117\101\040 \099\111\109\112\044 \"\099\111\110\102\105\103\095\101\120\112\108\111\115\105\111\110\"\044 \098\044 \116\111\115\116\114\105\110\103\040\118\041 \041 \101\110\100")return L end local function P()local P=ModTextFileGetContent("\100\097\116\097\047\115\099\114\105\112\116\115\047\112\101\114\107\115\047\103\108\097\115\115\095\099\097\110\110\111\110\095\101\110\101\109\121\046\108\117\097")local Y=dofile_once("\109\111\100\115\047\110\111\105\116\097-\115\116\114\101\097\107-\101\120\112\108\111\114\101\114\047\108\105\098\115\047\109\100\053\047\109\100\053\046\108\117\097")local B=dofile_once("\109\111\100\115\047\110\111\105\116\097-\115\116\114\101\097\107-\101\120\112\108\111\114\101\114\047\102\105\108\101\115\047\114\101\119\114\105\116\101\047\104\097\115\104\046\108\117\097")local s=Y.sumhexa(P)local y=s==B.glass_cannon_enemy if not y then error("\082\101\119\114\111\116\101 \110\111\105\116\097 \102\105\108\101 \103\108\097\115\115\095\099\097\110\110\111\110\095\101\110\101\109\121\046\108\117\097")return end P=L(P)ModTextFileSetContent("\100\097\116\097\047\115\099\114\105\112\116\115\047\112\101\114\107\115\047\103\108\097\115\115\095\099\097\110\110\111\110\095\101\110\101\109\121\046\108\117\097",P)end return{rewrite=P,rewrite_code=L}
---func
---@param content string
---@return string
local function rewrite_code(content)
  -- ガラスキャノンダメージの修正
  content = content:gsub("damage = damage %* 3%.0", "damage = damage * 0.2 * 3.0")
  -- ガラスキャノンのタイプ別ダメージの修正
  content = content:gsub("v = v %* 3%.0", "v = v * 0.2 * 3.0")
  -- config_explosionのダメージ修正
  content = content:gsub("v = v %* 4%.0", "if (v ~= nil) then v = v * 0.2 * 4.0")
  -- 存在しない項目読み込みによるnilエラー回避
  content = content:gsub(
    'ComponentObjectSetValue%( comp, %"config_explosion%", b, tostring%(v%) %)',
    'ComponentObjectSetValue( comp, "config_explosion", b, tostring(v) ) end'
  )
  return content
end

local function rewrite()
  local content = ModTextFileGetContent("data/scripts/perks/glass_cannon_enemy.lua")

  local md5 = dofile_once("mods/noita-streak-explorer/libs/md5/md5.lua")
  local hash = dofile_once("mods/noita-streak-explorer/files/rewrite/hash.lua")

  local result = md5.sumhexa(content)
  local valid = result == hash.glass_cannon_enemy

  if not valid then
    error("Rewrote noita file glass_cannon_enemy.lua")
    return
  end

  content = rewrite_code(content)
  ModTextFileSetContent("data/scripts/perks/glass_cannon_enemy.lua", content)
end

return {
  rewrite = rewrite,
  rewrite_code = rewrite_code,
}
