import unittest
from mindscreen import questionnaires as q
from mindscreen.risk_engine import RiskEngine, RiskLevel


class TestRiskEngine(unittest.TestCase):
    def setUp(self):
        self.engine = RiskEngine(use_ml_signal=True)

    def test_low_risk_case(self):
        phq9 = q.score_phq9([0] * 9)
        gad7 = q.score_gad7([0] * 7)
        pss10 = q.score_pss10([1, 1, 1, 3, 3, 1, 3, 3, 1, 1])
        nlp_summary = {
            "message_count": 5, "avg_sentiment": 0.6,
            "total_depression_markers": 0, "total_anxiety_markers": 0,
            "total_stress_markers": 0, "avg_first_person_ratio": 0.05,
            "avg_absolutist_count": 0.0,
        }
        result = self.engine.assess(phq9, gad7, pss10, nlp_summary, 26, 26)
        self.assertEqual(result.depression.risk_level, RiskLevel.LOW)
        self.assertEqual(result.anxiety.risk_level, RiskLevel.LOW)
        self.assertGreater(result.overall_wellness_score, 60)
        self.assertIsNotNone(result.ml_signal)

    def test_high_risk_case(self):
        phq9 = q.score_phq9([3] * 9)
        gad7 = q.score_gad7([3] * 7)
        pss10 = q.score_pss10([4, 4, 4, 0, 0, 4, 0, 0, 4, 4])
        nlp_summary = {
            "message_count": 5, "avg_sentiment": -0.8,
            "total_depression_markers": 6, "total_anxiety_markers": 5,
            "total_stress_markers": 5, "avg_first_person_ratio": 0.2,
            "avg_absolutist_count": 3.0,
        }
        result = self.engine.assess(phq9, gad7, pss10, nlp_summary, 26, 26)
        self.assertEqual(result.depression.risk_level, RiskLevel.HIGH)
        self.assertEqual(result.anxiety.risk_level, RiskLevel.HIGH)
        self.assertLess(result.overall_wellness_score, 40)

    def test_confidence_scales_with_completeness(self):
        phq9 = q.score_phq9([1] * 9)
        gad7 = q.score_gad7([1] * 7)
        pss10 = q.score_pss10([2] * 10)
        nlp_summary = {"message_count": 0, "avg_sentiment": 0.0,
                        "total_depression_markers": 0, "total_anxiety_markers": 0,
                        "total_stress_markers": 0, "avg_first_person_ratio": 0.0,
                        "avg_absolutist_count": 0.0}
        low_completeness = self.engine.assess(phq9, gad7, pss10, nlp_summary, 10, 26)
        high_completeness = self.engine.assess(phq9, gad7, pss10, nlp_summary, 26, 26)
        self.assertLess(low_completeness.confidence_score, high_completeness.confidence_score)

    def test_explanation_present(self):
        phq9 = q.score_phq9([2] * 9)
        gad7 = q.score_gad7([2] * 7)
        pss10 = q.score_pss10([2] * 10)
        nlp_summary = {"message_count": 3, "avg_sentiment": -0.2,
                        "total_depression_markers": 1, "total_anxiety_markers": 1,
                        "total_stress_markers": 1, "avg_first_person_ratio": 0.1,
                        "avg_absolutist_count": 1.0}
        result = self.engine.assess(phq9, gad7, pss10, nlp_summary, 26, 26)
        self.assertTrue(len(result.depression.explanation) > 0)
        self.assertTrue(len(result.explanation_summary) > 0)


if __name__ == "__main__":
    unittest.main()
