// import { useState, useEffect } from 'react'; // import { useNavigate } from 'react-router-dom'; // import { useLanguage } from '../../lib/languageContext'; // import { LanguageSwitcher } from '../LanguageSwitcher'; // // ─── Types ──────────────────────────────────────────────────── // type InterviewStatus = // | 'loading' // جاري جلب البيانات // | 'no_interview' // لا يوجد موعد بعد // | 'scheduled' // موعد محدد — الزر معطل لحد ما يحين الوقت // | 'joinable' // حان وقت المقابلة — الزر مفعّل // | 'completed'; // انتهت المقابلة // interface InterviewData { // scheduledAt: string; // ISO datetime e.g. "2026-03-25T14:00:00" // meetingLink: string; // رابط الاجتماع // status: 'PENDING' | 'COMPLETED' | 'CANCELLED'; // } // // ─── Date helpers ───────────────────────────────────────────── // const AR_DAYS = ['الأحد','الاثنين','الثلاثاء','الأربعاء','الخميس','الجمعة','السبت']; // const AR_MONTHS = ['يناير','فبراير','مارس','أبريل','مايو','يونيو','يوليو','أغسطس','سبتمبر','أكتوبر','نوفمبر','ديسمبر']; // function fmtDateAr(d: Date) { // return `${AR_DAYS[d.getDay()]}، ${d.getDate()} ${AR_MONTHS[d.getMonth()]} ${d.getFullYear()}`; // } // function fmtDateEn(d: Date) { // return d.toLocaleDateString('en-US', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }); // } // function fmtTimeAr(d: Date) { // const h = d.getHours(); // const m = d.getMinutes().toString().padStart(2, '0'); // const h12 = h === 0 ? 12 : h > 12 ? h - 12 : h; // return `${h12}:${m} ${h < 12 ? 'صباحاً' : 'مساءً'}`; // } // function fmtTimeEn(d: Date) { // return d.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit', hour12: true }); // } // function timeUntil(d: Date, isAr: boolean): string { // const diff = d.getTime() - Date.now(); // if (diff <= 0) return ''; // const days = Math.floor(diff / 86400000); // const hours = Math.floor((diff % 86400000) / 3600000); // const mins = Math.floor((diff % 3600000) / 60000); // if (isAr) { // if (days > 0) return `بعد ${days} يوم`; // if (hours > 0) return `بعد ${hours} ساعة`; // return `بعد ${mins} دقيقة`; // } // if (days > 0) return `in ${days} day${days > 1 ? 's' : ''}`; // if (hours > 0) return `in ${hours} hour${hours > 1 ? 's' : ''}`; // return `in ${mins} minute${mins > 1 ? 's' : ''}`; // } // // ───────────────────────────────────────────────────────────── // // ⚠️ API_PLACEHOLDER — استبدل الداتا الاستاتيك دي بـ API حقيقي // // // // Endpoint المطلوب: // // GET /api/sheikh/interview // // Headers: Authorization: Bearer // // // // Response لو في موعد: // // { // // "scheduledAt": "2026-03-25T14:00:00", // // "meetingLink": "https://meet.google.com/xxx", // // "status": "PENDING" | "COMPLETED" | "CANCELLED" // // } // // // // Response لو مفيش موعد: // // 404 Not Found // // // // ───────────────────────────────────────────────────────────── // // ⬇️ الداتا الاستاتيك — احذفها لما تربط الـ API // const STATIC_INTERVIEW: InterviewData | null = { // // غيّر 'scheduled' لـ null لو عايز تشوف شاشة "لا يوجد موعد" // // غيّر status لـ 'COMPLETED' لو عايز تشوف شاشة "انتهت المقابلة" // scheduledAt: (() => { // // موعد بعد 2 يوم من دلوقتي للاختبار // const d = new Date(); // d.setDate(d.getDate() + 2); // d.setHours(14, 0, 0, 0); // return d.toISOString(); // })(), // meetingLink: 'https://meet.google.com/abc-defg-hij', // status: 'PENDING', // }; // // ─── Main Component ─────────────────────────────────────────── // export function InterviewSchedule() { // const { language } = useLanguage(); // const navigate = useNavigate(); // const isAr = language === 'ar'; // const [status, setStatus] = useState('loading'); // const [interview, setInterview] = useState(null); // const [error, setError] = useState(''); // // ───────────────────────────────────────────────────────── // // ⚠️ API_PLACEHOLDER — جلب بيانات المقابلة // // استبدل الكود ده بـ: // // // // const token = localStorage.getItem('authToken') ?? ''; // // const res = await fetch('/api/sheikh/interview', { // // headers: { Authorization: `Bearer ${token}` } // // }); // // if (res.status === 404) { setStatus('no_interview'); return; } // // if (!res.ok) throw new Error(`${res.status}`); // // const data: InterviewData = await res.json(); // // processInterviewData(data); // // ───────────────────────────────────────────────────────── // useEffect(() => { // // محاكاة loading لمدة ثانية ونص للاختبار // const timer = setTimeout(() => { // try { // // ⬇️ ابدأ من هنا لما تربط الـ API — شيل الـ STATIC_INTERVIEW واستخدم response الـ API // const data = STATIC_INTERVIEW; // if (!data) { // setStatus('no_interview'); // return; // } // processInterviewData(data); // } catch (e: any) { // setError(e.message || 'Unknown error'); // setStatus('no_interview'); // } // }, 1200); // return () => clearTimeout(timer); // }, []); // function processInterviewData(data: InterviewData) { // setInterview(data); // if (data.status === 'COMPLETED') { setStatus('completed'); return; } // if (data.status === 'CANCELLED') { setStatus('no_interview'); return; } // const scheduled = new Date(data.scheduledAt); // // يصبح joinable لو الموعد جه أو باقي 5 دقائق أو أقل // if (scheduled.getTime() - Date.now() <= 5 * 60 * 1000) { // setStatus('joinable'); // } else { // setStatus('scheduled'); // } // } // // Tick كل 30 ثانية عشان يتحول لـ joinable تلقائياً لما يحين الوقت // useEffect(() => { // if (!interview || status !== 'scheduled') return; // const timer = setInterval(() => { // const scheduled = new Date(interview.scheduledAt); // if (scheduled.getTime() - Date.now() <= 5 * 60 * 1000) { // setStatus('joinable'); // clearInterval(timer); // } // }, 30_000); // return () => clearInterval(timer); // }, [interview, status]); // const scheduledDate = interview ? new Date(interview.scheduledAt) : null; // const remaining = scheduledDate && status === 'scheduled' // ? timeUntil(scheduledDate, isAr) : ''; // // ─── Render ───────────────────────────────────────────────── // return ( // <> // //
//