import React, { useState } from "react";
import Field from "@/app/component/fields/Field";
import { Button } from "@mui/material";
import { request } from "@/services/response";
import { alert } from "@/helper";
import ArrowLeftD from "@/components/icons/ArrowLeftD";

function Form({ doctor, setOpen, comment, loading, changeData, setComment, setLoading }) {
  const [isError, setIsError] = useState(false);

  const handleRatingError = (err) => {
    const status = err?.response?.status;
    const code = err?.response?.data?.errors?.[0]?.code;
    if (status === 401) {
      alert("warning", "برای ثبت نظر باید ابتدا وارد حساب کاربری شوید.");
    } else if (status === 403 && code === "ERR_RATING_NOT_ELIGIBLE") {
      alert(
        "warning",
        "فقط کاربرانی که در یک ماه گذشته نزد این پزشک نوبت تایید‌شده داشته‌اند می‌توانند نظر ثبت کنند."
      );
    } else {
      alert("error", "خطایی رخ داد! لطفاً دوباره تلاش کنید.");
    }
  };

  const sendReq = async () => {
    const text = comment?.detail?.comment;
    if (!text) {
      setIsError(true);
      return;
    }

    setLoading(true);
    try {
      await request.postDoctorComment({ doctor_uuid: doctor.uuid, comment: text });

      const rate = { doctor_uuid: doctor.uuid };
      comment.rate.forEach((item) => {
        rate[item.name] = item.progress;
      });
      await request.postDoctorRate(rate);

      setComment({ ...comment, detail: { ...comment.detail, comment: "" } });
      alert("success", "نظر شما ثبت شد و پس از تأیید نمایش داده می‌شود.");
      setOpen(false);
    } catch (err) {
      handleRatingError(err);
    } finally {
      setLoading(false);
    }
  };

  const handleChange = (_, val) => {
    if (val && isError) setIsError(false);
    else if (!val && !isError) setIsError(true);
    changeData("detail", "comment", val);
  };

  return (
    <div className="flex flex-col gap-[16px] justify-center items-start mt-[24px]">
      <p className="text-[#495057] text-[16px] font-bold">متن نظر</p>
      <Field
        type="text"
        error={isError}
        multiline={true}
        handleChange={handleChange}
        title="نظر خود را بنویسید..."
      />
      <Button
        onClick={sendReq}
        disabled={loading}
        variant="contained"
        className="!py-2.5 !mr-auto !px-4 gap-1 !text-[14px] !font-medium !mt-[32px] !shadownon"
      >
        ثبت نظر
        <div className="w-[20px] h-[20px]">
          <ArrowLeftD />
        </div>
      </Button>
    </div>
  );
}

export default Form;
