"use client"; import { useState } from "react"; import { useRouter, usePathname } from "next/navigation"; import Link from "next/link"; import { Box, Button, Modal, TextField } from "@mui/material"; import { styleDefault } from "@/mui"; import JalaliDatePicker from "@/components/common/JalaliDatePicker"; import CloseModalD from "@/components/icons/CloseModalD"; import Cookies from "js-cookie"; import { convertToJalali, isUserLoggedIn } from "@/helper"; import { request } from "@/services/response"; import Altcha from "@/components/Altcha"; const initialForm = { national_code: "", birth_date: "", first_name: "", last_name: "" }; function currentUserMobile() { try { return JSON.parse(Cookies.get("userInfo") || "{}")?.mobile_number || ""; } catch { return ""; } } /** * احراز مالکیت پروفایل پزشک ایمپورت‌شده (unclaimed). * کامپوننت مشترک برای دامنهٔ اصلی و همهٔ زیردامنه‌ها/دامنه‌های نمایندگان — * منطق claim به دامنه وابسته نیست؛ احراز هویت کاملاً سمت سرور انجام می‌شود. */ function ClaimProfileSection({ doctor }) { const router = useRouter(); const pathname = usePathname(); const [open, setOpen] = useState(false); const [form, setForm] = useState(initialForm); const [fieldErrors, setFieldErrors] = useState({}); const [error, setError] = useState(""); const [loading, setLoading] = useState(false); const [claimed, setClaimed] = useState(false); const [success, setSuccess] = useState(false); const [altcha, setAltcha] = useState(null); // null=در حال آماده‌سازی، ""=خاموش، payload=حل‌شده const [confirmDelete, setConfirmDelete] = useState(false); const [deleting, setDeleting] = useState(false); if (doctor?.owner_status !== "unclaimed" || claimed) { return null; } const loggedIn = isUserLoggedIn(); const userMobile = currentUserMobile(); const setField = (key, value) => { setForm((f) => ({ ...f, [key]: value })); setFieldErrors((e) => ({ ...e, [key]: undefined })); }; const validate = () => { const errs = {}; const nc = form.national_code.replace(/[۰-۹]/g, (d) => "۰۱۲۳۴۵۶۷۸۹".indexOf(d)); if (!/^\d{10}$/.test(nc)) errs.national_code = "کد ملی باید ۱۰ رقم باشد"; if (!form.birth_date) errs.birth_date = "تاریخ تولد را انتخاب کنید"; if (!form.first_name.trim()) errs.first_name = "نام الزامی است"; if (!form.last_name.trim()) errs.last_name = "نام خانوادگی الزامی است"; setFieldErrors(errs); return Object.keys(errs).length === 0; }; const submit = async () => { if (loading || !validate()) return; setLoading(true); setError(""); try { await request.postDoctorClaim(doctor.uuid, { ...form, mobile: userMobile, altcha }); setLoading(false); setSuccess(true); } catch (err) { setLoading(false); const first = err?.response?.data?.errors?.[0]; setError(first?.message || "خطایی رخ داد. لطفاً دوباره تلاش کنید."); } }; const closeAfterSuccess = () => { setOpen(false); setClaimed(true); router.push("/dashboard"); }; const removeProfile = async () => { if (deleting) return; setDeleting(true); setError(""); try { await request.deleteDoctor(doctor.uuid); setDeleting(false); setOpen(false); setClaimed(true); router.push("/"); } catch (err) { setDeleting(false); const first = err?.response?.data?.errors?.[0]; setError(first?.message || "حذف پروفایل ممکن نشد."); } }; return ( <>

این پروفایل بر اساس اطلاعات عمومی سازمان نظام پزشکی ایجاد شده است و هنوز توسط پزشک تأیید و مدیریت نمی‌شود. نوبت‌های این پروفایل عمومی و غیرخاص هستند.

آیا شما این پزشک هستید؟

!loading && setOpen(false)}>

احراز مالکیت پروفایل

!loading && setOpen(false)}>
{success ? (

دکتر {form.first_name} {form.last_name}، به نوبت ۷۲۴ خوش آمدید 🎉

پروفایل شما با موفقیت تأیید شد و اکنون می‌توانید اطلاعات پروفایل و تنظیمات نوبت‌دهی خود را مدیریت کنید.

{error && (

{error}

)} {confirmDelete ? (

آیا از حذف کامل این پروفایل مطمئن هستید؟ این عمل قابل بازگشت نیست.

) : ( )}
) : !loggedIn ? (

برای احراز مالکیت، ابتدا با شماره موبایل خود وارد شوید. پس از ورود، به همین صفحه بازگردید و دوباره تلاش کنید.

) : (

اطلاعات هویتی شما به‌صورت امن با سامانهٔ ثبت احوال و اطلاعات سازمان نظام پزشکی تطبیق داده می‌شود.

setField("first_name", e.target.value)} fullWidth /> setField("last_name", e.target.value)} fullWidth /> setField("national_code", e.target.value)} inputProps={{ maxLength: 10, dir: "ltr" }} fullWidth /> setField("birth_date", convertToJalali(e._d))} /> {error && (

{error}

)}
)}
); } export default ClaimProfileSection;