File size: 6,101 Bytes
2e88d15
93e5f31
 
04deb84
 
93e5f31
 
 
2e88d15
 
 
 
 
66b01a6
2e88d15
 
 
04deb84
 
2e88d15
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
93e5f31
b44217f
 
93e5f31
 
66b01a6
b44217f
 
 
 
66b01a6
b44217f
 
 
 
04deb84
66b01a6
 
 
 
 
 
 
 
 
 
 
93e5f31
b44217f
 
 
 
66b01a6
b44217f
 
 
 
04deb84
 
93e5f31
b44217f
93e5f31
 
04deb84
b44217f
04deb84
 
 
93e5f31
2e88d15
 
 
 
 
 
b44217f
2e88d15
 
 
b44217f
 
93e5f31
b44217f
 
 
 
66b01a6
 
 
b44217f
 
2e88d15
b44217f
 
 
 
2e88d15
 
 
 
b44217f
 
93e5f31
 
 
04deb84
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
import { useState, useEffect } from "react";
import useAnalyzer from "../hooks/useAnalyzer";
import { FIELDS } from "../data/responses";

export default function CompatibilityAnalyzer() {
  const [fieldA, setFieldA] = useState(FIELDS[0].id);
  const [fieldB, setFieldB] = useState(FIELDS[1].id);
  const { isAnalyzing, compatResult, analyzeCompat } = useAnalyzer();
  const [celebrate, setCelebrate] = useState(false);

  useEffect(() => {
    if (compatResult && compatResult.score >= 90 && !isAnalyzing) {
      setCelebrate(true);
      const timer = setTimeout(() => setCelebrate(false), 4000);
      return () => clearTimeout(timer);
    }
  }, [compatResult, isAnalyzing]);

  return (
    <div className="w-full relative" style={{ animation: "fadeUp 0.4s ease both" }}>
      
      {celebrate && (
        <div className="absolute inset-0 pointer-events-none overflow-hidden z-50">
          {[...Array(20)].map((_, i) => {
            const randomX = Math.random() * 100;
            const randomDelay = Math.random() * 2;
            const randomColor = compatResult.color || '#22c55e';
            return (
              <div
                key={i}
                className="absolute w-2 h-4 rounded-sm opacity-80 animate-confetti-fall"
                style={{
                  left: `${randomX}%`,
                  top: `-20px`,
                  backgroundColor: i % 2 === 0 ? randomColor : '#ffffff',
                  animationDelay: `${randomDelay}s`,
                  transform: `rotate(${Math.random() * 360}deg)`
                }}
              />
            );
          })}
        </div>
      )}

      <div className="glass-card mb-6">
        <label className="block text-[11px] font-mono text-neutral-500 uppercase tracking-widest mb-4">
          [02] نظام فحص التوافق الثنائي
        </label>
        
        <div className="flex flex-col sm:flex-row gap-4 items-center mb-6">
          <div className="w-full relative">
            <select 
              value={fieldA} 
              onChange={(e) => setFieldA(e.target.value)}
              className="w-full p-3 bg-white/[0.02] text-white border border-white/10 rounded-xl font-medium text-sm outline-none appearance-none focus:border-white/20 transition-colors text-center sm:text-right"
            >
              {FIELDS.map(f => <option key={f.id} value={f.id} className="bg-neutral-900">{f.label}</option>)}
            </select>
          </div>

          {/* القلب النابض الاحترافي بين التخصصين */}
          <div className="flex items-center justify-center px-2">
            <svg 
              xmlns="http://www.w3.org/2000/svg" 
              viewBox="0 0 24 24" 
              fill="currentColor" 
              className="w-6 h-6 text-rose-500/80 drop-shadow-[0_0_10px_rgba(244,63,94,0.5)] animate-real-beat"
            >
              <path d="M11.645 20.91l-.007-.003-.022-.012a15.247 15.247 0 01-.383-.218 25.18 25.18 0 01-4.244-3.17C4.688 15.36 2.25 12.174 2.25 8.25 2.25 5.322 4.714 3 7.688 3A5.5 5.5 0 0112 5.052 5.5 5.5 0 0116.313 3c2.973 0 5.437 2.322 5.437 5.25 0 3.925-2.438 7.111-4.739 9.256a25.175 25.175 0 01-4.244 3.17 15.247 15.247 0 01-.383.219l-.022.012-.007.004-.003.001a.752.752 0 01-.704 0l-.003-.001z" />
            </svg>
          </div>

          <div className="w-full relative">
            <select 
              value={fieldB} 
              onChange={(e) => setFieldB(e.target.value)}
              className="w-full p-3 bg-white/[0.02] text-white border border-white/10 rounded-xl font-medium text-sm outline-none appearance-none focus:border-white/20 transition-colors text-center sm:text-right"
            >
              {FIELDS.map(f => <option key={f.id} value={f.id} className="bg-neutral-900">{f.label}</option>)}
            </select>
          </div>
        </div>

        <button 
          className="w-full py-3.5 bg-white text-black font-bold rounded-xl text-sm transition-all hover:bg-neutral-200 active:scale-[0.99] disabled:opacity-40"
          onClick={() => analyzeCompat(fieldA, fieldB)}
          disabled={isAnalyzing}
        >
          {isAnalyzing ? "جاري احتساب النِسَب..." : "تحليل مؤشر التوافق"}
        </button>
      </div>

      {compatResult && !isAnalyzing && (
        <div 
          className={`glass-card text-center overflow-hidden transition-all duration-500 ${
            compatResult.score >= 90 ? "animate-heart-pulse border-emerald-500/30" : ""
          }`}
          style={{ animation: "fadeUp 0.5s ease both" }}
        >
          <div 
            className={`absolute -top-24 left-1/2 -translate-x-1/2 w-42 h-42 rounded-full blur-[60px] pointer-events-none transition-all duration-1000 ${
              compatResult.score >= 90 ? "opacity-40 scale-125 animate-glow-pulse" : "opacity-25"
            }`}
            style={{ background: compatResult.color || '#ffffff' }}
          />
          
          <div className="relative z-10">
            <div className="text-6xl font-extrabold tracking-tight mb-1 font-mono" style={{ color: compatResult.color || '#fff' }}>
              {compatResult.score}%
            </div>
            {/* التعديل هنا: تغيير النص إلى نسبة التوافق */}
            <div className="text-xs font-bold text-neutral-400 mb-6 font-arabic">
              نسبة التوافق
            </div>
            
            <p className="text-base font-medium text-neutral-200 mb-6 px-4 leading-relaxed">
              "{compatResult.joke}"
            </p>
            
            <div className="inline-flex items-center gap-2 px-4 py-1.5 rounded-full bg-white/[0.03] border border-white/5 text-xs text-neutral-300">
              <span 
                className={`w-1.5 h-1.5 rounded-full ${compatResult.score >= 90 ? "animate-ping" : ""}`} 
                style={{ background: compatResult.color || '#fff' }} 
              />
              <span>{compatResult.verdict}</span>
            </div>
          </div>
        </div>
      )}
    </div>
  );
}