# app/services/spi_questions.py

"""
SPI (Synthetic Personality Inventory) 문제 은행
- 言語 (Language): 5문제
- 非言語 (Non-verbal): 5문제  
- 性格 (Personality): 10문제
총 20문제
"""

SPI_QUESTIONS = {
    "language": [
        # 1. 포함 관계 (일반 -> 구체) | 날씨:태풍
        {
            "id": 1,
            "type": "language",
            "text": "最初に示された二語の関係を考え、同じ関係のものをア～ウより選びなさい。\n\n【例題】天気：台風\n\nア 野菜：トマト\nイ 車：エンジン\nウ 机：木材",
            "options": ["A (ア)", "B (イ)", "C (ウ)", "D (アとイ)", "E (アとウ)", "F (イとウ)"],
            "correct_answer": "A (ア)",
            "explanation": "「台風」は「天気」の一種（包含関係）。「トマト」は「野菜」の一種。イは全体と部分、ウは原料の関係。"
        },
        # 2. 행위 주체와 동작 | 大工(목수):建築(건축)
        {
            "id": 2,
            "type": "language",
            "text": "最初に示された二語の関係を考え、同じ関係のものをア～ウより選びなさい。\n\n【例題】大工：建築\n\nア 歌手：歌唱\nイ 包丁：料理\nウ 教師：指導",
            "options": ["A (ア)", "B (イ)", "C (ウ)", "D (アとイ)", "E (アとウ)", "F (イとウ)"],
            "correct_answer": "E (アとウ)",
            "explanation": "大工が建築する（行為主体）。歌手が歌唱する、教師が指導する。イは道具の関係。"
        },
        # 3. 포함 관계 (A는 B의 일종) | 피아노:악기 -> [수정] A,B,C 포맷 적용
        {
            "id": 3,
            "type": "language",
            "text": "最初に示された二語の関係と同じ関係の対を作りたい。○○にあてはまる適切な語句を選びなさい。\n\nピアノ：楽器\nバラ：○○",
            # 수정된 부분: 보기 앞에 알파벳 추가
            "options": ["A 赤", "B 花", "C 植物園", "D 棘（とげ）", "E プレゼント"], 
            "correct_answer": "B 花", # 수정된 부분: 정답도 알파벳 포함하여 매칭
            "explanation": "ピアノは楽器の一種。バラは花の一種。"
        },
        # 4. 원료 관계 | 두부:콩 -> [수정] A,B,C 포맷 적용
        {
            "id": 4,
            "type": "language",
            "text": "最初に示された二語の関係と同じ関係の対を作りたい。○○にあてはまる適切な語句を選びなさい。\n\n豆腐：大豆\nパン：○○",
            # 수정된 부분: 보기 앞에 알파벳 추가
            "options": ["A 小麦粉", "B 朝食", "C バター", "D ジャム", "E オーブン"],
            "correct_answer": "A 小麦粉", # 수정된 부분
            "explanation": "豆腐の原料は大豆。パンの原料は小麦粉。"
        },
        # 5. 포함 관계 (일반 -> 구체) | 가구:소파
        {
            "id": 5,
            "type": "language",
            "text": "最初に示された二語の関係を考え、同じ関係のものをア～ウより選びなさい。\n\n【例題】家具：ソファー\n\nア 飲み物：コーヒー\nイ シャツ：衣類\nウ 日本：東京",
            "options": ["A (ア)", "B (イ)", "C (ウ)", "D (アとイ)", "E (アとウ)", "F (イとウ)"],
            "correct_answer": "A (ア)",
            "explanation": "ソファーは家具の一種。コーヒーは飲み物の一種。イは順序が逆、ウは場所の関係。"
        }
    ],
    
    "nonverbal": [
        # 6. 추론 (순서) | 성적 ABCDE
        {
            "id": 6,
            "type": "nonverbal",
            "text": "A、B、C、D、Eの5人が試験を受けた。点数の順位について次のことが分かっている。\n\nⅰ）CはDより点数が高い\nⅱ）EはCより高いが、1位ではなかった\nⅲ）BはAより高い\nⅳ）同点の者はいない\n\n（1）次のア、イ、ウの推論のうち、必ず正しいものはどれか。\nア Bは1位である\nイ Dは最下位である\nウ 2位はAまたはEである",
            "options": ["A アだけ", "B イだけ", "C ウだけ", "D アとイの両方", "E アとウの両方", "F イとウの両方", "G アとイとウのすべて", "H 必ず正しい推論はない"],
            "correct_answer": "E アとウの両方",
            "explanation": "順位: E>C>D。Eは1位ではないので、Eより上がいる。B>A。1位になれるのはBのみ(アは正しい)。順序は B>E>C>D... となり、2位はEかAの可能性がある(ウは正しい)。"
        },
        # 7. 집합 | 사원 100명 (PC/태블릿 소유)
        {
            "id": 7,
            "type": "nonverbal",
            "text": "ある会社の社員100人を対象に、持っている端末について調査した。PCを持っている人は60人、タブレットを持っている人は40人いた。また、どちらも持っていない人は20人であった。このとき、両方持っている人は何人か。",
            "options": ["A 10人", "B 15人", "C 20人", "D 25人", "E 30人", "F 35人", "G 40人", "H 45人"],
            "correct_answer": "C 20人",
            "explanation": "全体(100) = PC(60) + TB(40) - 両方(x) + なし(20)。\n100 = 120 - x → x = 20人。"
        },
        # 8. 손익산 | 2000엔
        {
            "id": 8,
            "type": "nonverbal",
            "text": "ある商品の原価は2,000円である。この商品に原価の4割の利益を見込んで定価をつけたが、売れないので定価の2割引で売ることにした。売価はいくらか。",
            "options": ["A 2,160円", "B 2,240円", "C 2,320円", "D 2,400円", "E 2,480円", "F 2,560円", "G 2,640円", "H 2,720円"],
            "correct_answer": "B 2,240円",
            "explanation": "定価 = 2000 × 1.4 = 2800円。\n売価 = 2800 × 0.8 = 2240円。"
        },
        # 9. 속도산 | 10km 호수
        {
            "id": 9,
            "type": "nonverbal",
            "text": "AとBの2人は、1周10kmの湖の周りを走る。Aは時速4km、Bは時速6kmで走り、速度は常に一定である。\n\n今、2人が同じ地点から反対方向に同時に走り出したとき、再び出会うのは何時間後か。",
            "options": ["A 0.5時間後", "B 1時間後", "C 1.5時間後", "D 2時間後", "E 2.5時間後", "F 3時間後", "G 3.5時間後", "H 4時間後"],
            "correct_answer": "B 1時間後",
            "explanation": "反対方向 = 速さの和。時速(4+6)=10km。\n時間 = 距離 ÷ 速さ = 10km ÷ 10km/h = 1時間後。"
        },
        # 10. 확률 | 공 뽑기 (적색/백색)
        {
            "id": 10,
            "type": "nonverbal",
            "text": "袋の中に、赤玉が2個、白玉が3個入っている。この袋から同時に2個の玉を取り出すとき、2個とも白玉である確率はいくらか。",
            "options": ["A 1/10", "B 3/10", "C 3/5", "D 1/5", "E 1/2", "F 2/5", "G 7/10", "H 4/5"],
            "correct_answer": "B 3/10",
            "explanation": "全体：5個から2個選ぶ = 5C2 = 10通り。\n事象：白3個から2個選ぶ = 3C2 = 3通り。\n確率 = 3/10。"
        }
    ],

    "personality": [
        # 적극성 (主体性)
        {"id": 11, "type": "personality", "text": "新しい環境や変化に対して、積極的に行動する方だ", "options": ["A 当てはまる", "B やや当てはまる", "C どちらでもない", "D あまり当てはまらない", "E 当てはまらない"], "trait": "positivity"},
        {"id": 12, "type": "personality", "text": "指示を待つよりも、自分で考えて動くことを好む", "options": ["A 当てはまる", "B やや当てはまる", "C どちらでもない", "D あまり当てはまらない", "E 当てはまらない"], "trait": "positivity"},
        
        # 협조성 (協調性)
        {"id": 13, "type": "personality", "text": "チーム全体の目標達成のためなら、自分の主張を抑えることができる", "options": ["A 当てはまる", "B やや当てはまる", "C どちらでもない", "D あまり当てはまらない", "E 当てはまらない"], "trait": "cooperation"},
        {"id": 14, "type": "personality", "text": "周囲の人の意見や感情に配慮して行動する", "options": ["A 当てはまる", "B やや当てはまる", "C どちらでもない", "D あまり当てはまらない", "E 当てはまらない"], "trait": "cooperation"},
        
        # 스트레스 내성 (ストレス耐性)
        {"id": 15, "type": "personality", "text": "嫌なことがあっても、翌日には気持ちを切り替えられる", "options": ["A 当てはまる", "B やや当てはまる", "C どちらでもない", "D あまり当てはまらない", "E 当てはまらない"], "trait": "resilience"},
        {"id": 16, "type": "personality", "text": "予期せぬトラブルが起きても、慌てずに対処できる", "options": ["A 当てはまる", "B やや当てはまる", "C どちらでもない", "D あまり当てはまらない", "E 当てはまらない"], "trait": "resilience"},
        
        # 책임감 (責任感)
        {"id": 17, "type": "personality", "text": "任された役割は、困難があっても最後までやり抜く", "options": ["A 当てはまる", "B やや当てはまる", "C どちらでもない", "D あまり当てはまらない", "E 当てはまらない"], "trait": "responsibility"},
        {"id": 18, "type": "personality", "text": "約束の時間や期限を破ることはほとんどない", "options": ["A 当てはまる", "B やや当てはまる", "C どちらでもない", "D あまり当てはまらない", "E 当てはまらない"], "trait": "responsibility"},
        
        # 계획성 (計画性)
        {"id": 19, "type": "personality", "text": "物事を始めるときは、まず手順やスケジュールを決める", "options": ["A 当てはまる", "B やや当てはまる", "C どちらでもない", "D あまり当てはまらない", "E 当てはまらない"], "trait": "planning"},
        {"id": 20, "type": "personality", "text": "行き当たりばったりではなく、合理的に物事を進める", "options": ["A 当てはまる", "B やや当てはまる", "C どちらでもない", "D あまり当てはまらない", "E 当てはまらない"], "trait": "planning"}
    ]
}


def get_all_questions():
    """전체 문제 리스트 반환 (순서대로)"""
    all_questions = []
    all_questions.extend(SPI_QUESTIONS["language"])
    all_questions.extend(SPI_QUESTIONS["nonverbal"])
    all_questions.extend(SPI_QUESTIONS["personality"])
    return all_questions


def get_question_by_id(question_id):
    """ID로 특정 문제 조회"""
    all_questions = get_all_questions()
    for q in all_questions:
        if q["id"] == question_id:
            return q
    return None


def get_questions_by_type(question_type):
    """타입별 문제 조회 (language / nonverbal / personality)"""
    return SPI_QUESTIONS.get(question_type, [])