# frozen_string_literal: true

module BCDice
  module GameSystem
    class IfIfIf < Base
      ID = "IfIfIf"

      # ゲームシステム名
      NAME = "イフ・イフ・イフ"

      # ゲームシステム名の読みがな
      SORT_KEY = "いふいふいふ"

      HELP_MESSAGE = <<~TEXT
        100の質問：HQT
        ハイリスク歪み表：HDT
        ローリスク歪み表：LDT
          「HQT1」「LDT4」のように、表の後ろに数字を付けることで、10個の表から個別に振ることができます。
        致命的な歪みの回避：ID
        改竄判定：IM
        強制改竄判定：IE
      TEXT

      def eval_game_system_specific_command(command)
        return check_action(command) || roll_tables(command, TABLES)
      end

      def check_action(command)
        case command
        when "ID"
          eval_common_command("3TY6")
        when "IE"
          dicearr = @randomizer.roll_barabara(3, 6)
          success = dicearr.count(6) == 3
          success_count = dicearr.count(6)
          if success
            Result.success("(3B6=6) ＞ #{dicearr.join(',')} ＞ 6の数:#{success_count}")
          else
            Result.failure("(3B6=6) ＞ #{dicearr.join(',')} ＞ 6の数:#{success_count} 不足数:#{3 - success_count}")
          end
        when "IM"
          dicearr = @randomizer.roll_barabara(3, 6)
          success_count = dicearr.count(6)
          if success_count == 0
            Result.failure("(3B6=6) ＞ #{dicearr.join(',')} ＞ 6の数:#{success_count} 選べるエンド数:#{success_count + 1}")
          else
            Result.success("(3B6=6) ＞ #{dicearr.join(',')} ＞ 6の数:#{success_count} 選べるエンド数:#{success_count + 1}")
          end
        else
          return nil
        end
      end

      HQT1 = DiceTable::Table.new(
        "100の質問表その１‐印象質問",
        "1D10",
        [
          "相手の好きなところはどこですか？",
          "相手の苦手なところはどこですか？",
          "相手の尊敬できるところはどこですか？",
          "相手の容姿についてどう思っていますか？",
          "相手の才能についてどう思っていますか？",
          "相手の趣味についてどう思っていますか？",
          "相手の価値観についてどう思っていますか？",
          "相手について理解できないところはどこですか？",
          "相手について心配なところはどこですか？",
          "相手の第一印象と今の印象で変化した点はどこですか？",
        ]
      )

      HQT2 = DiceTable::Table.new(
        "100の質問表その２‐日常質問",
        "1D10",
        [
          "ふたりの関係性を一言で表すなら？",
          "二人の日常はどんな様子ですか？",
          "「なんの予定もない、一緒にいる休日」の過ごし方はどんな風ですか？",
          "ふたりの最初の出会いはどんな風でしたか？",
          "ふたりで食事をするときは、どんな様子ですか？",
          "ふたりで買い物をするときは、どんな様子ですか？",
          "ふたりで一緒に寝ることはありますか？　あるなら、どんな様子ですか？",
          "ふたりで最近ハマっていることってありますか？",
          "相手といると緊張しますか？　安心しますか？",
          "相手への愚痴ってありますか？　この際言っちゃいましょう！"
        ]
      )

      HQT3 = DiceTable::Table.new(
        "100の質問表その３‐汎用思い出質問",
        "1D10",
        [
          "喧嘩した思い出はありますか？　詳しく語ってください！",
          "相手を看病した時の思い出はありますか？　詳しく語ってください！",
          "相手からの贈り物で印象深いものはありますか？",
          "ふたりで約束してることはありますか？　教えてください！",
          "お互いしか知らない秘密はありますか？　教えてください！",
          "相手を泣かせた思い出はありますか？　詳しく語ってください！",
          "ふたりで犬 or 猫を目の前にしたときの思い出はありますか？詳しく語ってください！",
          "ふたりでどこかに閉じ込められた思い出はありますか？　詳しく語ってください！",
          "ふたりで旅（旅行）をした思い出はありますか？　詳しく語ってください！",
          "ふたりでいてドキドキした思い出はありますか？　詳しく語ってください！",
        ]
      )

      HQT4 = DiceTable::Table.new(
        "100の質問表その４‐情景思い出質問",
        "1D10",
        [
          "ふたりで夜明けを迎えたときの思い出を語ってくれますか？",
          "ふたりで星を見た思い出を語ってくれますか？",
          "ふたりで海に行った思い出を語ってくれますか？",
          "ふたりで暗闇で過ごした思い出を語ってくれますか？",
          "ふたりで炎に巻かれた思い出を語ってくれますか？",
          "ふたりで花畑で過ごした思い出を語ってくれますか？",
          "ふたりで森で過ごした思い出を語ってくれますか？",
          "ふたりで砂漠を歩いた思い出を語ってくれますか？",
          "ふたりで廃墟を歩いた思い出をかたってくれますか？",
          "ふたりで突然雨に降られたときの思い出を語ってくれますか？",
        ]
      )

      HQT5 = DiceTable::Table.new(
        "100の質問表その５‐内緒の質問（オフレコ推奨）",
        "1D10",
        [
          "相手に絶対に知られたくない秘密ってありますか？　教えてください！",
          "相手に嘘をついていることはありますか？　教えてください！",
          "相手に知られたら引かれそうなことってありますか？　教えてください！",
          "相手に知られたら怒られそうなことってありますか？　教えてください！",
          "相手に知られたら嫌われそうなことってありますか？　教えてください！",
          "相手に関して正直ちょっと引いたことはありますか？　どんなことですか？",
          "相手に恋した瞬間は、どんな感じでしたか？",
          "相手について密かに妄想してることはありますか？　教えてください！",
          "相手について「大っぴらに言うのははばかられるけど、好きなところ」ってありますか？　教えてください！",
          "相手に懺悔したいことはありますか？　どんなことですか？",
        ]
      )

      HQT6 = DiceTable::Table.new(
        "100の質問表その６‐ブラック質問１",
        "1D10",
        [
          "相手に嫌われたらどうしますか？",
          "相手を傷つけたことはありますか？　どんなことですか？",
          "相手を傷つけたいと思ったことはありますか？",
          "相手と殺し合ったことはありますか？　そのときのことを教えてください。",
          "相手を殺したいと思ったことはありますか？　そのときのことを教えてください。",
          "相手に嫉妬していることはありますか？　どんなことですか？",
          "相手を憎んでいることはありますか？　どんなことですか？",
          "相手に自分以外の恋人が出来たらどうしますか？",
          "相手が死んだら自分はどうしますか？",
          "自分が死んだら相手にどうしてもらいたいですか？",
        ]
      )

      HQT7 = DiceTable::Table.new(
        "100の質問表その７‐ブラック質問２",
        "1D10",
        [
          "相手と出会ってなかったら今頃どうなってたと思いますか？",
          "相手には、あなた以外にどんな人がふさわしいと思いますか？",
          "相手について怖いと思うところはどこですか？",
          "相手と自分の命、どっちのほうが大事ですか？",
          "相手のために、犯罪を犯すことはできますか？",
          "相手が犯罪者になってしまったらどうしますか？",
          "相手が完全な記憶喪失になったらどうしますか？",
          "相手が自分を忘れるのと、自分が相手を忘れるのだと、どちらがマシですか？",
          "相手に「死んでほしい」と言われたらどうしますか？",
          "相手に「殺して欲しい」と頼まれたらどうしますか？",
        ]
      )

      HQT8 = DiceTable::Table.new(
        "100の質問表その８‐雑談質問",
        "1D10",
        [
          "相手に対して、自分が自慢できるのはどんなところですか？",
          "相手の寝相についてどう思いますか？",
          "ふたりの体格差って、どんな感じですか？",
          "ふたりとも、幽霊って信じてますか？",
          "ふたりは自炊派？　外食派？",
          "ふたりは辛党？　甘党？",
          "お互いの家族構成、知ってますか？　知らないなら教え合いましょう！",
          "相手のファッション（普段の服装）について、どう思いますか？",
          "相手に手料理を食べさせたことはありますか？",
          "相手がコーヒーや紅茶にお砂糖何杯入れるか、知ってますか？",
        ]
      )

      HQT9 = DiceTable::Table.new(
        "100の質問表その９‐ファンタジー質問",
        "1D10",
        [
          "相手の種族についてどう思いますか？",
          "相手の魔法についてどう思いますか？",
          "相手の戦闘能力についてどう思いますか？",
          "戦場にいるときの相手の雰囲気についてどう思いますか？",
          "相手の特殊能力（戦闘面以外）についてどう思いますか？",
          "ふたりには、なにか二つ名や称号はありますか？　それについてどう思いますか？",
          "お互いの身分についてどう思いますか？",
          "ふたりに寿命差はありますか？　ある場合は、どう考えていますか？",
          "ふたりで敵に襲われたときの思い出を語ってくれますか？",
          "相手とダンジョンに行った思い出を語ってくれますか？",
        ]
      )

      HQT10 = DiceTable::Table.new(
        "100の質問表その１０‐現代質問",
        "1D10",
        [
          "お互い、どんな学校に通っていますか／通っていましたか？",
          "ＳＮＳってやっていますか？　お互いのアカウントって知ってますか？",
          "ふたりで映画を見るなら、どんなジャンルですか？　そのジャンルは1人で見るときと違いますか？",
          "ふたりでテーマパークに行った思い出はありますか？　詳しく教えてください！",
          "ふたりはよくメールや電話で連絡をとりますか？",
          "お互いの写真って持っていますか？　持っているなら、どんな写真ですか？",
          "ふたりでカラオケに行きますか？　行くならどんな様子ですか？",
          "ふたりで行きたい観光名所はありますか？　具体的な地名で教えてください！",
          "ふたりが好きな季節はいつですか？",
          "目玉焼きに何をかけますか？（塩、醤油、ソース、マヨネーズ……）",
        ]
      )

      LDT1 = DiceTable::Table.new(
        "ローリスク歪み表：名前、性別、年齢、人称",
        "1D10",
        [
          "ミドルネームが増える",
          "周囲からあだ名で呼ばれるようになる",
          "人に変なあだ名をつける癖ができる",
          "異性装が趣味になる",
          "理由あって異性として生活していることになる",
          "これ以降、外見年齢があまり変わらなくなる",
          "１０歳若返る",
          "１０歳歳を取る",
          "一人称が変わる",
          "二人称が変わる",
        ]
      )

      LDT2 = DiceTable::Table.new(
        "ローリスク歪み表：外見的特徴",
        "1D10",
        [
          "片目の色が変化する",
          "両目の色が変化する",
          "髪の色が変化する",
          "髪が癖毛（天然パーマ、猫っ毛など）になる",
          "髪の長さが変わる（長髪なら短髪に、短髪なら長髪に）",
          "他者から「美人」と言われる外見になる",
          "眼鏡キャラになる（伊達眼鏡でも可）",
          "特徴的なファッションになる（ゴスロリ、赤一色、常に白衣など）",
          "身長が１０ｃｍ大きくなる",
          "身長が１０ｃｍ小さくなる",
        ]
      )

      LDT3 = DiceTable::Table.new(
        "ローリスク歪み表：性格",
        "1D10",
        [
          "あらゆることに対する思い切りがよくなる",
          "思考や発想が幼くなる",
          "初対面の人と上手く話せなくなる",
          "感情の起伏が激しくなる",
          "感情を抑えがちになる",
          "泣き虫になる",
          "よく人に甘えるようになる",
          "とてつもなくポジティブになる",
          "天邪鬼になりがちになる",
          "自分を卑下しがちになる",
        ]
      )

      LDT4 = DiceTable::Table.new(
        "ローリスク歪み表：得意不得意",
        "1D10",
        [
          "得意不得意が逆転する",
          "運動がすごく得意になる",
          "芸術関係（絵、音楽、書道など）が得意になる",
          "感情を隠すのが下手になる",
          "手先が器用になる",
          "料理が壊滅的に下手になる",
          "四則演算が苦手になる",
          "人の真似が上手になる",
          "役に立たない特技ができる",
          "一般的にあり得ない異能（超能力など）に目覚める",
        ]
      )

      LDT5 = DiceTable::Table.new(
        "ローリスク歪み表：社会的立場",
        "1D10",
        [
          "転校／転職したことになる（元居た学校や職場でなくなる）",
          "自分のファンクラブが出来る",
          "学校／仕事の成績が大幅に向上する",
          "学校／仕事の成績が大幅に低下する",
          "賃金／お小遣いが下がる",
          "他人から妙に頼られるようになる",
          "自分に関する悪い噂が流れるようになる",
          "大金持ちになる",
          "ガラが悪い人々（不良、裏稼業など）と繋がっていることになる",
          "誰もが知っている有名人になる",
        ]
      )

      LDT6 = DiceTable::Table.new(
        "ローリスク歪み表：パートナーとの関係性や呼び方",
        "1D10",
        [
          "パートナーと恋仲だったことになる",
          "パートナーとお互いに特別な名前で呼び合うようになる",
          "パートナーと寝室が一緒になる",
          "パートナーと家族だったことになる",
          "パートナーとの身体的スキンシップが増える",
          "パートナーと家族ぐるみの付き合いになる",
          "自分がパートナーに精神的に依存する",
          "パートナーが自分に精神的に依存する",
          "パートナーを傷つけたくてたまらなくなる",
          "パートナーが好きで好きでたまらなくなる",
        ]
      )

      LDT7 = DiceTable::Table.new(
        "ローリスク歪み表：現在の生活",
        "1D10",
        [
          "近づくと赤ちゃんがギャン泣きする体質になる",
          "義理の家族がある",
          "仕事や学業などに忙殺される生活になる",
          "体調を崩しがちになる（貧血、流行病など）",
          "家族以外の誰かと同居していることになる（シェアハウス、同棲など）",
          "何らかの嗜好品（酒、煙草、甘味など）がやめられなくなる",
          "住居が雨漏りするようになる",
          "住居に心霊現象が発生するようになる",
          "近所の猫に嫌われる",
          "金遣いが荒くなる",
        ]
      )

      LDT8 = DiceTable::Table.new(
        "ローリスク歪み表：過去",
        "1D10",
        [
          "昔いじめられていたことになる",
          "以前なにかで表彰されたことになる",
          "以前グレていた時期があったことになる",
          "誰かにお金を借りていたことになる",
          "幼い頃、家出したことがあったことになる",
          "以前誰かに告白して、フラれたことになる",
          "幼い頃、体が弱かったことになる",
          "以前すごく中二病だったことになる",
          "南国で親父に〇〇（任意の特殊技能）を習っていたことになる",
          "誰かとの約束を忘れる",
        ]
      )

      LDT9 = DiceTable::Table.new(
        "ローリスク歪み表：自由欄１",
        "1D10",
        [
          "性癖が歪む",
          "ドジっ子属性がつく",
          "人の声が聞き取りにくくなる",
          "落ちている硬貨に必ず気づくようになる",
          "人の顔を覚えるのが苦手になる",
          "とても寒がりになる",
          "血を見るのが怖くなる",
          "ピーマンが苦手になる",
          "動物にやけに好かれるようになる",
          "暗いところが怖くなる",
        ]
      )

      LDT10 = DiceTable::Table.new(
        "ローリスク歪み表：自由欄２",
        "1D10",
        [
          "寝床に入ると数秒で寝落ちするようになる",
          "全裸でないと寝られなくなる",
          "見えないはずのものが見える様になる",
          "財布を忘れがちになる",
          "子供を見ると可愛がらざるを得なくなる",
          "夜眠れなくなる",
          "特徴的な口癖ができる",
          "掃除好きになる",
          "お年寄りにやけに好かれるようになる",
          "スリルを感じるのが快感になる",
        ]
      )

      HDT1 = DiceTable::Table.new(
        "ハイリスク歪み表：名前、性別、年齢、人称",
        "1D10",
        [
          "名前の綴り、あるいは漢字が変化する",
          "名前の音が変わる",
          "名無しとなり、誰も元の名前を思い出せなくなる",
          "生まれた時から異性だったことになる",
          "後天的に性別が異性に変化する",
          "これ以降一切歳をとらなくなる",
          "外見年齢が歳をとる",
          "外見年齢が幼くなる",
          "一人称が変化する",
          "二人称が変化する",
        ]
      )

      HDT2 = DiceTable::Table.new(
        "ハイリスク歪み表：外見的特徴",
        "1D10",
        [
          "片目の色が変化する",
          "両目の色が変化する",
          "髪の色が変化する",
          "全身から色素が抜け落ちる（アルビノ化）",
          "角が生える／もとが有角の場合は角を失う",
          "体の一部が獣のようになる／元が獣型の場合はヒトの形となる",
          "翼が生える／元が有翼の場合は翼を失う",
          "体の一部が人形のようになる／元が人形の場合は人と変わらぬ姿になる",
          "体の何処かに大きな傷が出来る",
          "体の何処かを欠損する",
        ]
      )

      HDT3 = DiceTable::Table.new(
        "ハイリスク歪み表：性格",
        "1D10",
        [
          "性格が攻撃的になる",
          "思考や発想が幼くなる",
          "疑心暗鬼になる",
          "感情の起伏が激しくなる",
          "感情の起伏が無くなる",
          "泣き虫になる",
          "よく人に甘えるようになる",
          "とてつもなくポジティブになる",
          "倫理観が欠如する",
          "特定の感情を喪失する",
        ]
      )

      HDT4 = DiceTable::Table.new(
        "ハイリスク歪み表：得意不得意",
        "1D10",
        [
          "得意不得意が逆転する",
          "戦闘能力を失う／高負荷の運動ができなくなる",
          "芸術関係（絵、音楽、書道など）が得意になる",
          "感情を隠すのが下手になる",
          "感覚が異様に鋭敏になる",
          "料理が壊滅的に下手になる",
          "四則演算が苦手になる",
          "特異な才能が開花する",
          "才能をひとつ失う",
          "一般的にあり得ない異能（超能力など）に目覚める",
        ]
      )

      HDT5 = DiceTable::Table.new(
        "ハイリスク歪み表：社会的立場",
        "1D10",
        [
          "職を失う",
          "周囲から崇められる立場になる",
          "学校／仕事の成績が大幅に向上する",
          "戸籍上死者になる",
          "借金まみれになる",
          "多くの人に慕われる人気者になる",
          "犯罪者として扱われる",
          "大金持ちになる",
          "何らかの組織に追われる身になる",
          "誰もが知っている有名人になる",
        ]
      )

      HDT6 = DiceTable::Table.new(
        "ハイリスク歪み表：パートナーとの関係性や呼び方",
        "1D10",
        [
          "パートナーと恋仲だったことになる",
          "パートナーとお互いに特別な名前で呼び合うようになる",
          "パートナーに憎まれる",
          "パートナーと家族だったことになる",
          "パートナーから忘れられる",
          "パートナーの言葉に逆らえなくなる",
          "自分がパートナーに精神的に依存する",
          "パートナーが自分に精神的に依存する",
          "パートナーを傷つけたくてたまらなくなる",
          "パートナーが好きで好きでたまらなくなる",
        ]
      )

      HDT7 = DiceTable::Table.new(
        "ハイリスク歪み表：現在の生活",
        "1D10",
        [
          "住居が崩壊する",
          "身に覚えがない子供ができる",
          "仕事や学業などに忙殺される生活になる",
          "体調を崩しがちになる（貧血、流行病など）",
          "住んでいる町（村、国）が滅びる",
          "何らかの嗜好品（酒、煙草、甘味など）がやめられなくなる",
          "故郷が滅びたことになる",
          "パートナー以外の人がいる場所が怖くなる",
          "住んでいる場所が戦場になる",
          "不治の病にかかる",
        ]
      )

      HDT8 = DiceTable::Table.new(
        "ハイリスク歪み表：過去",
        "1D10",
        [
          "かつて誰かを殺したことになる",
          "過去の功績がひとつなくなる",
          "過去のすべての記憶を失う",
          "かつてパートナーを傷つけたことがある",
          "幼い頃、自分以外の家族全員が死亡した",
          "以前誰かに告白して、フラれたことになる",
          "犯罪歴ができる",
          "大切な思い出がひとつなかったことになる",
          "悲しい思い出がひとつ増える",
          "誰かとの約束を忘れる",
        ]
      )

      HDT9 = DiceTable::Table.new(
        "ハイリスク歪み表：自由欄１",
        "1D10",
        [
          "パートナー以外の人の顔が塗りつぶされて見える",
          "色覚を失う",
          "声を失う",
          "誰かと目を合わせることが怖くなる",
          "零した涙が宝石になる",
          "体の一部に植物が生える",
          "血を見るのが怖くなる",
          "血を見ることに悦びを覚えるようになる",
          "動物にやけに好かれるようになる",
          "人に触れるのが怖くなる",
        ]
      )

      HDT10 = DiceTable::Table.new(
        "ハイリスク歪み表：自由欄２",
        "1D10",
        [
          "人の血を啜りたくなる",
          "失明する",
          "見えないはずのものが見える様になる",
          "水に浸かると人魚になってしまう",
          "鏡や写真にうつらなくなる",
          "夜眠れなくなる",
          "影が無くなる",
          "味覚が鈍くなる",
          "痛覚が鈍くなる",
          "意味もなく急に涙があふれるようになる",
        ]
      )

      TABLES = {
        "HQT" => DiceTable::ChainTable.new(
          "100の質問",
          "1D10",
          [
            HQT1,
            HQT2,
            HQT3,
            HQT4,
            HQT5,
            HQT6,
            HQT7,
            HQT8,
            HQT9,
            HQT10,
          ]
        ),
        "LDT" => DiceTable::ChainTable.new(
          "ローリスク歪み表",
          "1D10",
          [
            LDT1,
            LDT2,
            LDT3,
            LDT4,
            LDT5,
            LDT6,
            LDT7,
            LDT8,
            LDT9,
            LDT10,
          ]
        ),
        "HDT" => DiceTable::ChainTable.new(
          "ハイリスク歪み表",
          "1D10",
          [
            HDT1,
            HDT2,
            HDT3,
            HDT4,
            HDT5,
            HDT6,
            HDT7,
            HDT8,
            HDT9,
            HDT10,
          ]
        ),
        "HQT1" => HQT1,
        "HQT2" => HQT2,
        "HQT3" => HQT3,
        "HQT4" => HQT4,
        "HQT5" => HQT5,
        "HQT6" => HQT6,
        "HQT7" => HQT7,
        "HQT8" => HQT8,
        "HQT9" => HQT9,
        "HQT10" => HQT10,
        "HDT1" => HDT1,
        "HDT2" => HDT2,
        "HDT3" => HDT3,
        "HDT4" => HDT4,
        "HDT5" => HDT5,
        "HDT6" => HDT6,
        "HDT7" => HDT7,
        "HDT8" => HDT8,
        "HDT9" => HDT9,
        "HDT10" => HDT10,
        "LDT1" => LDT1,
        "LDT2" => LDT2,
        "LDT3" => LDT3,
        "LDT4" => LDT4,
        "LDT5" => LDT5,
        "LDT6" => LDT6,
        "LDT7" => LDT7,
        "LDT8" => LDT8,
        "LDT9" => LDT9,
        "LDT10" => LDT10,
      }.freeze

      register_prefix('ID', 'IE', 'IM', TABLES.keys)
    end
  end
end
