"use client";

import "../../style/globals.css";
import { Inter } from "next/font/google";
import "../../style/fontiran.css";
import NavBAr from "@comp/NavBar/NavBAr";
import "swiper/css";
import "swiper/css/navigation";
import "react-spring-bottom-sheet/dist/style.css";
import AppContext from "../../Contexts/AppContext";
import { useCallback, useEffect, useState } from "react";
import { motion } from "framer-motion";
import Link from "next/link";
import { usePathname, useRouter } from "next/navigation";
import { toast, ToastContainer } from "react-toastify";
import "react-toastify/dist/ReactToastify.css";
import Loading from "plugins/Loading/page";
import Chapar, { getToken } from "plugins/Chapar";
import TimePicker from "plugins/TimePicker/page";
import axios from "axios";
import "rc-slider/assets/index.css";

const inter = Inter({ subsets: ["latin"] });

// export const metadata = {
//   title: "Create Next App",
//   description: "Generated by create next app",
// };

export default function RootLayout({ children }) {
  // BottomSheet
  const [BottomSheetCreateRoleOpen, setBottomSheetCreateRoleOpen] =
    useState(false);

  const [BottomSheetCreateEmployeesOpen, setBottomSheetCreateEmployeesOpen] =
    useState(false);

  const [BottomSheetCreateShiftsOpen, setBottomSheetCreateShiftsOpen] =
    useState(false);

  const [BottomManageShiftOpen, setBottomManageShiftOpen] = useState(false);
  const [BottomSheetCreateRoutineOpen, setBottomSheetCreateRoutineOpen] =
    useState(false);
  const [BottomSheetCreateSectionOpen, setBottomSheetCreateSectionOpen] =
    useState(false);

  const [BottomSheetCreatePositionOpen, setBottomSheetCreatePositionOpen] =
    useState(false);

  const [
    BottomSheetAddUserToPositionShiftPlanOpen,
    setBottomSheetAddUserToPositionShiftPlanOpen,
  ] = useState(false);

  const [BottomSheetChangeRoleOpen, setBottomSheetChangeRoleOpen] =
    useState(false);

  // BigPlus
  const [BigPlusOpen, setBigPlusOpen] = useState(false);
  const [BigPlusRotateIcon, setBigPlusRotateIcon] = useState(false);

  // login
  const [phoneNumber, setPhoneNumber] = useState("");
  const [verifyCode, setVerifyCode] = useState("");
  const [stepLogin, setStepLogin] = useState(0);
  const [tokenForStorage, setTokenForStorage] = useState(null);
  const [profile, setProfile] = useState([]);

  // loading

  const [loading, setLoading] = useState(false);

  //auth
  const [complexId, setComplexId] = useState(0);

  // createRole / role
  const [permissions, setPermissions] = useState(0);
  const [permissionsChoose, setPermissionsChoose] = useState([]);
  const [rolesData, setRolesData] = useState([]);
  const [roleData, setRoleData] = useState([]);
  const [goToEditRole, setGoToEditRole] = useState(false);
  const [idEditRole, setIdEditRole] = useState(null);

  // createUser/ user
  const [usersData, setUsersData] = useState([]);
  const [rolesChoose, setRolesChoose] = useState([]);
  const [userData, setUserData] = useState([]);
  const [goToEditUser, setGoToEditUser] = useState(false);
  const [idEditUser, setIdEditUser] = useState(null);

  // createsection/ section
  const [sectionsData, setSectionsData] = useState([]);
  const [sectionData, setSectionData] = useState([]);
  const [goToEditSection, setGoToEditSection] = useState(false);
  const [idEditSection, setIdEditSection] = useState(null);

  // createroutine/ routine
  const [routinesData, setRoutinesData] = useState([]);
  const [routineData, setRoutineData] = useState([]);
  const [routineShiftPlan, setRoutineShiftPlan] = useState([]);
  const [goToEditRoutine, setGoToEditRoutine] = useState(false);
  const [idEditRoutine, setIdEditRoutine] = useState(null);

  // createPosition/ Position
  const [positionsData, setPositionsData] = useState([]);
  const [positionData, setPositionData] = useState([]);
  const [goToEditPosition, setGoToEditPosition] = useState(false);
  const [idEditPosition, setIdEditPosition] = useState(null);
  const [sectionIdChoose, setSectionIdChoose] = useState([]);

  // shift
  const [dayOfWeeksChoose, setDayOfWeeksChoose] = useState([]);
  const [startAtTimeShift, setStartAtTimeShift] = useState(["00", "00"]);
  const [endAtTimeShift, setEndAtTimeShift] = useState(["00", "00"]);
  const [shiftsData, setShiftsData] = useState([null]);
  const [shiftData, setShiftData] = useState([null]);
  const [goToEditShift, setGoToEditShift] = useState(false);
  const [idEditShift, setIdEditShift] = useState(null);
  const [shiftPlanData, setShiftPlanData] = useState([]);

  // task
  const [routineForTaskChoose, setRoutineForTaskChoose] = useState([]);
  const [positionsForTaskChoose, setPositionsForTaskChoose] = useState([]);
  const [shiftsForTaskChoose, setShiftsForTaskChoose] = useState([]);
  const [shiftsDaysChoose, setShiftsDaysChoose] = useState([]);
  const [tasksData, setTasksData] = useState([null]);
  const [taskData, setTaskData] = useState([null]);
  const [goToEditTask, setGoToEditTask] = useState(false);
  const [idEditTask, setIdEditTask] = useState(null);

  // activity
  const [activitiesData, setActivitiesData] = useState([null]);

  // shift manage-shift
  const [searchUserChoose, setSearchUserChoose] = useState([]);

  // TimePicker
  const [openTimePicker, setOpenTimePicker] = useState(false);
  const [TimePickerOrder, setTimePickerOrder] = useState(null);

  // closeShift
  const [completeActivities, setCompleteActivities] = useState([]);

  const pathname = usePathname();
  const router = useRouter();
  const hiddenUrls = ["/login", "/"];
  const shouldRenderComponent = !hiddenUrls.includes(pathname);

  const closeBigPlusPage = () => {
    setTimeout(() => {
      setBigPlusOpen(false);
    }, 500);

    setBigPlusRotateIcon(false);
  };
  const ConfirmPhoneNumber = async (phoneNumber) => {
    try {
      const data = await Chapar.get(
        `${process.env.NEXT_PUBLIC_API_URL}/auth/verifycode?phoneNumber=${phoneNumber}`
      );
      setStepLogin(1);
      localStorage.removeItem("token");
    } catch ({ error, status }) {
      toast.error("  اطلاعات را صحیح وارد کنید ", {
        position: "bottom-right",
        closeOnClick: true,
      });
    }
  };
  const LoginWhitVerifyCode = async () => {
    setLoading(true);

    try {
      const data = await Chapar.post(
        `${process.env.NEXT_PUBLIC_API_URL}/auth/login/code`,
        {
          userName: phoneNumber,
          password: null,
          verifyCode,
        }
      );
      setLoading(false);
      localStorage.setItem("token", data.access_token);

      if (data.user.signUpStatus == 1) {
        setStepLogin(2);
      } else if (data.user.signUpStatus == 2 || data.user.signUpStatus == 3) {
        setProfile(data);
        toast.success(`  ${data.user.firstName}  جان خوش اومدی `, {
          position: "bottom-right",
          closeOnClick: true,
        });
        router.push("/home");
      }
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };
  const SignUpLogin = async (body) => {
    setLoading(true);

    try {
      const data = await Chapar.post(
        `${process.env.NEXT_PUBLIC_API_URL}/auth/signup/complex`,
        body,
        {
          headers: {
            Authorization: getToken(),
          },
        }
      );

      setLoading(false);

      if (data.user.signUpStatus == 2 || data.user.signUpStatus == 3) {
        setProfile(data);

        toast.success(`  ${data.user.firstName}  جان خوش اومدی `, {
          position: "bottom-right",
          closeOnClick: true,
        });
        localStorage.setItem("token", data.access_token);

        router.push("/home");
      }
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };
  const GetPermissions = async (body) => {
    setLoading(true);

    try {
      const data = await Chapar.get(
        `${process.env.NEXT_PUBLIC_API_URL}/role/permission`,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );

      setPermissions(data);
      setLoading(false);
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };

  const CreateRole = async (body) => {
    setLoading(true);
    try {
      const data = await Chapar.post(
        `${process.env.NEXT_PUBLIC_API_URL}/role`,
        body,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      toast.success(`نقش ساخته شد`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setBottomSheetCreateRoleOpen(false);
      setLoading(false);
      GetRoles();
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };
  const UpdateRole = async (body) => {
    setLoading(true);
    try {
      const data = await Chapar.put(
        `${process.env.NEXT_PUBLIC_API_URL}/role`,
        body,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      toast.success(`نقش ویرایش شد`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setBottomSheetCreateRoleOpen(false);
      setLoading(false);
      GetRoles();
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };
  const GetRoles = async () => {
    setLoading(true);
    try {
      const data = await Chapar.get(
        `${process.env.NEXT_PUBLIC_API_URL}/role?page=0`,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      setRolesData(data);
      setLoading(false);
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };
  const GetRole = async (id) => {
    setLoading(true);
    try {
      const data = await Chapar.get(
        `${process.env.NEXT_PUBLIC_API_URL}/role/${id}?page=0`,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      setRoleData(data);
      setLoading(false);
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };
  const DeleteRole = async (id) => {
    setLoading(true);
    try {
      const data = await Chapar.delete(
        `${process.env.NEXT_PUBLIC_API_URL}/role/${id}`,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      setBottomSheetCreateRoleOpen(false);
      setLoading(false);

      GetRoles();
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };

  const CreateUser = async (body) => {
    setLoading(true);
    try {
      const data = await Chapar.post(
        `${process.env.NEXT_PUBLIC_API_URL}/user`,
        body,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      toast.success(`کاربر ساخته شد`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setBottomSheetCreateEmployeesOpen(false);
      setLoading(false);
      GetUsers();
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };
  const UpdateUser = async (body) => {
    setLoading(true);
    try {
      const data = await Chapar.put(
        `${process.env.NEXT_PUBLIC_API_URL}/user`,
        body,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      toast.success(`کاربر ویرایش شد`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setBottomSheetCreateEmployeesOpen(false);
      setLoading(false);
      GetUsers();
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };
  const GetUsers = async () => {
    setLoading(true);
    try {
      const data = await Chapar.get(
        `${process.env.NEXT_PUBLIC_API_URL}/user?page=0`,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );

      setUsersData(data);
      setLoading(false);
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };
  const GetUser = async (id) => {
    setLoading(true);
    try {
      const data = await Chapar.get(
        `${process.env.NEXT_PUBLIC_API_URL}/user/${id}`,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      setUserData(data);
      setLoading(false);
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };
  const DeleteUser = async (id) => {
    setLoading(true);
    try {
      const data = await Chapar.delete(
        `${process.env.NEXT_PUBLIC_API_URL}/user/${id}`,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      setBottomSheetCreateEmployeesOpen(false);
      setLoading(false);

      GetUsers();
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };

  const CreateShift = async (body) => {
    setLoading(true);
    try {
      const data = await Chapar.post(
        `${process.env.NEXT_PUBLIC_API_URL}/shift`,
        JSON.stringify(body),
        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      toast.success(`شیفت ساخته شد`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setBottomSheetCreateShiftsOpen(false);
      setLoading(false);
      GetShifts();
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };
  const UpdateShift = async (body) => {
    setLoading(true);
    try {
      const data = await Chapar.put(
        `${process.env.NEXT_PUBLIC_API_URL}/shift`,
        body,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      toast.success(`شیفت ویرایش شد`, {
        position: "bottom-right",
        closeOnClick: true,
      });

      setBottomSheetCreateShiftsOpen(false);
      setLoading(false);
      GetShifts();
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };
  const GetShifts = async (date) => {
    console.log(
      "Date123456789",
      `${process.env.NEXT_PUBLIC_API_URL}/shift?page=0${
        date ? `&selectedDate=${date}` : ""
      }`
    );
    setLoading(true);
    try {
      const data = await Chapar.get(
        `${process.env.NEXT_PUBLIC_API_URL}/shift?page=0${
          date ? `&selectedDate=${date}` : ""
        }`,
        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      setShiftsData(data);
      setLoading(false);
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };

  const GetShiftPlan = async (id) => {
    setLoading(true);
    try {
      const data = await Chapar.get(
        `${process.env.NEXT_PUBLIC_API_URL}/shift/plan/${id}`,
        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      setShiftPlanData(data);
      setLoading(false);
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };
  const UpdateShiftPlan = async (body, id) => {
    setLoading(true);
    try {
      const data = await Chapar.put(
        `${process.env.NEXT_PUBLIC_API_URL}/shift/plan`,
        body,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      toast.success(`شیفت ویرایش شد`, {
        position: "bottom-right",
        closeOnClick: true,
      });

      setLoading(false);
      setShiftPlanData(id);
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };

  const GetShift = async (id) => {
    setLoading(true);
    try {
      const data = await Chapar.get(
        `${process.env.NEXT_PUBLIC_API_URL}/shift/${id}`,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      setShiftData(data);
      setLoading(false);
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };
  const DeleteShift = async (id) => {
    setLoading(true);
    try {
      const data = await Chapar.delete(
        `${process.env.NEXT_PUBLIC_API_URL}/shift/${id}`,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      setBottomSheetCreateShiftsOpen(false);

      setLoading(false);
      GetShifts();
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };

  const CreateSection = async (body) => {
    setLoading(true);
    try {
      const data = await Chapar.post(
        `${process.env.NEXT_PUBLIC_API_URL}/section`,
        JSON.stringify(body),
        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      toast.success(`سکشن ساخته شد`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setBottomSheetCreateSectionOpen(false);
      setLoading(false);
      GetSections();
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };
  const UpdateSection = async (body) => {
    setLoading(true);
    try {
      const data = await Chapar.put(
        `${process.env.NEXT_PUBLIC_API_URL}/section`,
        body,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      toast.success(`سکشن ویرایش شد`, {
        position: "bottom-right",
        closeOnClick: true,
      });

      setBottomSheetCreateSectionOpen(false);
      setLoading(false);
      GetSections();
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };
  const GetSections = async () => {
    setLoading(true);
    try {
      const data = await Chapar.get(
        `${process.env.NEXT_PUBLIC_API_URL}/section?page=0`,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      setSectionsData(data);
      setLoading(false);
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };
  const GetSection = async (id) => {
    setLoading(true);
    try {
      const data = await Chapar.get(
        `${process.env.NEXT_PUBLIC_API_URL}/section/${id}`,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      setSectionData(data);
      setLoading(false);
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };
  const DeleteSection = async (id) => {
    setLoading(true);
    try {
      const data = await Chapar.delete(
        `${process.env.NEXT_PUBLIC_API_URL}/section/${id}`,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      setBottomSheetCreateSectionOpen(false);

      setLoading(false);
      GetSections();
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };

  const CreateRoutine = async (body) => {
    setLoading(true);
    try {
      const data = await Chapar.post(
        `${process.env.NEXT_PUBLIC_API_URL}/routine`,
        JSON.stringify(body),
        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      toast.success(`روتین ساخته شد`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setBottomSheetCreateRoutineOpen(false);
      setLoading(false);
      GetRoutines();
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };
  const UpdateRoutine = async (body) => {
    setLoading(true);
    try {
      const data = await Chapar.put(
        `${process.env.NEXT_PUBLIC_API_URL}/routine`,
        body,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      toast.success(`روتین ویرایش شد`, {
        position: "bottom-right",
        closeOnClick: true,
      });

      setBottomSheetCreateRoutineOpen(false);
      setLoading(false);
      GetRoutines();
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };
  const GetRoutines = async () => {
    setLoading(true);
    try {
      const data = await Chapar.get(
        `${process.env.NEXT_PUBLIC_API_URL}/routine?page=0`,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      setRoutinesData(data);
      setLoading(false);
    } catch (error) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
      // if (error.response.status === 401) {
      //   localStorage.removeItem("token");
      // window.location.href = "/";
      // }
    }
  };
  const GetRoutine = async (id) => {
    setLoading(true);
    try {
      const data = await Chapar.get(
        `${process.env.NEXT_PUBLIC_API_URL}/routine/${id}`,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      setRoutineData(data);
      setLoading(false);
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };

  const GetRoutineShiftPlan = async (id, time) => {
    setLoading(true);
    try {
      const data = await Chapar.get(
        `${process.env.NEXT_PUBLIC_API_URL}/routine/${id}/shift?selectedDate=${time}`,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );

      setRoutineShiftPlan(data);
      setLoading(false);
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };
  const CreateShifPlan = async (body) => {
    setLoading(true);
    try {
      const data = await Chapar.post(
        `${process.env.NEXT_PUBLIC_API_URL}/shift/plan`,
        JSON.stringify(body),
        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      toast.success(`مدیریت شیفت ساخته شد`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      router.push("/shifts");
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };

  const DeleteRoutine = async (id) => {
    setLoading(true);
    try {
      const data = await Chapar.delete(
        `${process.env.NEXT_PUBLIC_API_URL}/routine/${id}`,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      setBottomSheetCreateRoutineOpen(false);

      setLoading(false);
      GetRoutines();
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };

  const CreatePosition = async (body) => {
    setLoading(true);
    try {
      const data = await Chapar.post(
        `${process.env.NEXT_PUBLIC_API_URL}/position`,
        JSON.stringify(body),
        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      toast.success(`پوزیشن ساخته شد`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setBottomSheetCreatePositionOpen(false);
      setLoading(false);
      GetPositions();
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };
  const UpdatePosition = async (body) => {
    setLoading(true);
    try {
      const data = await Chapar.put(
        `${process.env.NEXT_PUBLIC_API_URL}/position`,
        body,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      toast.success(`پوزیشن ویرایش شد`, {
        position: "bottom-right",
        closeOnClick: true,
      });

      setBottomSheetCreatePositionOpen(false);
      setLoading(false);
      GetPositions();
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };
  const GetPositions = async () => {
    setLoading(true);
    try {
      const data = await Chapar.get(
        `${process.env.NEXT_PUBLIC_API_URL}/position?page=0`,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      setPositionsData(data);
      setLoading(false);
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };
  const GetPosition = async (id) => {
    setLoading(true);
    try {
      const data = await Chapar.get(
        `${process.env.NEXT_PUBLIC_API_URL}/position/${id}`,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      setPositionData(data);
      setLoading(false);
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };
  const DeletePosition = async (id) => {
    setLoading(true);
    try {
      const data = await Chapar.delete(
        `${process.env.NEXT_PUBLIC_API_URL}/position/${id}`,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      setBottomSheetCreatePositionOpen(false);

      setLoading(false);
      GetPositions();
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };

  const CreateTask = async (body) => {
    setLoading(true);
    try {
      const data = await Chapar.post(
        `${process.env.NEXT_PUBLIC_API_URL}/task`,
        JSON.stringify(body),
        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      toast.success(`فعالیت ساخته شد`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      // router->

      setLoading(false);
      GetTasks();

      router.push("/tasks");
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };
  const UpdateTask = async (body) => {
    setLoading(true);
    try {
      const data = await Chapar.put(
        `${process.env.NEXT_PUBLIC_API_URL}/task`,
        body,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      toast.success(`فعالیت ویرایش شد`, {
        position: "bottom-right",
        closeOnClick: true,
      });

      // router->

      setLoading(false);
      GetTasks();
      router.push("/tasks");
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };
  const GetTasks = async () => {
    setLoading(true);
    try {
      const data = await Chapar.get(
        `${process.env.NEXT_PUBLIC_API_URL}/task?page=0`,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      setTasksData(data);
      setLoading(false);
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };
  const GetTask = async (id) => {
    setLoading(true);
    try {
      const data = await Chapar.get(
        `${process.env.NEXT_PUBLIC_API_URL}/task/${id}`,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      setTaskData(data);
      setLoading(false);
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };
  const DeleteTask = async (id) => {
    setLoading(true);
    try {
      const data = await Chapar.delete(
        `${process.env.NEXT_PUBLIC_API_URL}/task/${id}`,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );

      setLoading(false);
      GetTasks();
      router.push("/tasks");
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };

  const GetActivity = async (date, shift) => {
    setLoading(true);
    try {
      const data = await Chapar.get(
        `${process.env.NEXT_PUBLIC_API_URL}/activity?page=0${
          date ? `&selectedDate=${date}` : ""
        }${shift ? `&selectedShift=${shift}` : ""}`,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      setActivitiesData(data);
      setLoading(false);
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };
  const DoneActivity = async (id) => {
    setLoading(true);
    try {
      const data = await Chapar.post(
        `${process.env.NEXT_PUBLIC_API_URL}/activity/done/${id}`,
        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      toast.success(`فعالیت ثبت شد`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      // router->

      setLoading(false);
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };
  const UnDoneActivity = async (id, resone) => {
    setLoading(true);
    try {
      const data = await Chapar.post(
        `${process.env.NEXT_PUBLIC_API_URL}/activity/undone/${id}?undoneReason=${resone}`,
        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      toast.success(`فعالیت ثبت شد`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      // router->

      setLoading(false);
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };

  const CloseShift = async (body, id) => {
    setLoading(true);
    try {
      const data = await Chapar.post(
        `${process.env.NEXT_PUBLIC_API_URL}/shift/plan/${id}/complete`,
        body,
        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      toast.success(`فعالیت ثبت شد`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      // router->

      setLoading(false);
      // GetTasks();
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };

  const changeRole = async (id) => {
    setLoading(true);
    try {
      const data = await Chapar.post(
        `${process.env.NEXT_PUBLIC_API_URL}/user/role/change/${id}`,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      setProfile(data);
      setLoading(false);
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };

  const CheckUser = async () => {
    setLoading(true);
    try {
      const data = await Chapar.get(
        `${process.env.NEXT_PUBLIC_API_URL}/user/profile`,

        {
          headers: {
            Authorization: getToken(),
          },
        }
      );
      setProfile(data);

      setLoading(false);
    } catch ({ error, status }) {
      toast.error(`${error?.response?.data?.message}`, {
        position: "bottom-right",
        closeOnClick: true,
      });
      setLoading(false);
    }
  };

  useEffect(() => {
    console.log(`
    bbbbbbbb                                                                                        
    b::::::b                               iiii                                                     
    b::::::b                              i::::i                                                    
    b::::::b                               iiii                                                     
     b:::::b                                                                                        
     b:::::bbbbbbbbb   rrrrr   rrrrrrrrr iiiiiiizzzzzzzzzzzzzzzzz   cccccccccccccccc  ooooooooooo   
     b::::::::::::::bb r::::rrr:::::::::ri:::::iz:::::::::::::::z cc:::::::::::::::coo:::::::::::oo 
     b::::::::::::::::br:::::::::::::::::ri::::iz::::::::::::::z c:::::::::::::::::o:::::::::::::::o
     b:::::bbbbb:::::::rr::::::rrrrr::::::i::::izzzzzzzz::::::z c:::::::cccccc:::::o:::::ooooo:::::o
     b:::::b    b::::::br:::::r     r:::::i::::i      z::::::z  c::::::c     cccccco::::o     o::::o
     b:::::b     b:::::br:::::r     rrrrrri::::i     z::::::z   c:::::c            o::::o     o::::o
     b:::::b     b:::::br:::::r           i::::i    z::::::z    c:::::c            o::::o     o::::o
     b:::::b     b:::::br:::::r           i::::i   z::::::z     c::::::c     cccccco::::o     o::::o
     b:::::bbbbbb::::::br:::::r          i::::::i z::::::zzzzzzzc:::::::cccccc:::::o:::::ooooo:::::o
     b::::::::::::::::b r:::::r          i::::::iz::::::::::::::zc:::::::::::::::::o:::::::::::::::o
     b:::::::::::::::b  r:::::r          i::::::z:::::::::::::::z cc:::::::::::::::coo:::::::::::oo 
     bbbbbbbbbbbbbbbb   rrrrrrr          iiiiiiizzzzzzzzzzzzzzzzz   cccccccccccccccc  ooooooooooo   

     soli chizi bood bgo hossein__masoomi                                                                                   
                                                                                                
    `);

    if (profile.length <= 0 && localStorage.token) CheckUser();
  }, []);

  return (
    <AppContext.Provider
      value={{
        state: {
          BottomSheetCreateRoleOpen,
          BottomSheetCreateEmployeesOpen,
          BottomSheetCreateShiftsOpen,
          BigPlusOpen,
          BigPlusRotateIcon,
          loading,
          stepLogin,
          phoneNumber,
          verifyCode,
          tokenForStorage,
          complexId,
          permissions,
          permissionsChoose,
          rolesData,
          usersData,
          rolesChoose,
          goToEditRole,
          roleData,
          idEditRole,
          idEditUser,
          goToEditUser,
          userData,
          openTimePicker,
          endAtTimeShift,
          startAtTimeShift,
          TimePickerOrder,
          shiftsData,
          idEditShift,
          goToEditShift,
          shiftData,
          profile,
          searchUserChoose,
          BottomManageShiftOpen,
          idEditSection,
          goToEditSection,
          sectionData,
          sectionsData,
          BottomSheetCreateSectionOpen,
          BottomSheetCreateRoutineOpen,
          idEditRoutine,
          goToEditRoutine,
          routineData,
          routinesData,
          dayOfWeeksChoose,
          idEditPosition,
          goToEditPosition,
          positionData,
          positionsData,
          BottomSheetCreatePositionOpen,
          sectionIdChoose,
          routineForTaskChoose,
          positionsForTaskChoose,
          shiftsForTaskChoose,
          shiftsDaysChoose,
          idEditTask,
          goToEditTask,
          taskData,
          tasksData,
          routineShiftPlan,
          BottomSheetAddUserToPositionShiftPlanOpen,
          BottomSheetChangeRoleOpen,
          activitiesData,
          completeActivities,
          shiftPlanData,
        },
        setBottomSheetCreateRoleOpen,
        setBottomSheetCreateEmployeesOpen,
        setBottomSheetCreateShiftsOpen,
        setBigPlusOpen,
        setBigPlusRotateIcon,
        setLoading,
        ConfirmPhoneNumber,
        LoginWhitVerifyCode,
        setStepLogin,
        setPhoneNumber,
        setVerifyCode,
        SignUpLogin,
        setTokenForStorage,
        setComplexId,
        setPermissions,
        GetPermissions,
        setPermissionsChoose,
        CreateRole,
        setRolesData,
        GetRoles,
        CreateUser,
        GetUsers,
        setUsersData,
        setRolesChoose,
        setGoToEditRole,
        setRoleData,
        GetRole,
        setIdEditRole,
        DeleteRole,
        UpdateRole,
        setIdEditUser,
        setGoToEditUser,
        setUserData,
        DeleteUser,
        GetUser,
        UpdateUser,
        setOpenTimePicker,
        setEndAtTimeShift,
        setIdEditShift,
        setGoToEditShift,
        setStartAtTimeShift,
        setBottomManageShiftOpen,
        GetShifts,
        DeleteShift,
        GetShift,
        UpdateShift,
        CreateShift,
        setIdEditSection,
        setGoToEditSection,
        setSectionData,
        setSectionsData,
        setBottomSheetCreateSectionOpen,
        DeleteSection,
        GetSection,
        GetSections,
        UpdateSection,
        CreateSection,
        setBottomSheetCreateRoutineOpen,
        setIdEditRoutine,
        setGoToEditRoutine,
        setRoutineData,
        setRoutinesData,
        DeleteRoutine,
        GetRoutine,
        GetRoutines,
        UpdateRoutine,
        CreateRoutine,
        setDayOfWeeksChoose,
        setShiftData,
        setTimePickerOrder,
        setSearchUserChoose,
        setIdEditPosition,
        setGoToEditPosition,
        setPositionData,
        setPositionsData,
        setBottomSheetCreatePositionOpen,
        DeletePosition,
        GetPosition,
        GetPositions,
        UpdatePosition,
        CreatePosition,
        setSectionIdChoose,
        setRoutineForTaskChoose,
        setPositionsForTaskChoose,
        setShiftsForTaskChoose,
        setShiftsDaysChoose,
        DeleteTask,
        GetTask,
        GetTasks,
        UpdateTask,
        CreateTask,
        setIdEditTask,
        setGoToEditTask,
        setTaskData,
        setTasksData,
        setRoutineShiftPlan,
        GetRoutineShiftPlan,
        setBottomSheetAddUserToPositionShiftPlanOpen,
        CreateShifPlan,
        setBottomSheetChangeRoleOpen,
        setActivitiesData,
        GetActivity,
        UnDoneActivity,
        DoneActivity,
        changeRole,
        setCompleteActivities,
        CloseShift,
        setShiftPlanData,
        GetShiftPlan,
        UpdateShiftPlan,
      }}
    >
      <html lang="en">
        <body className={inter.className}>
          {children}
          {shouldRenderComponent && <NavBAr />}
          <ToastContainer position="bottom-right" closeOnClick={true} rtl />
          <Loading />

          {openTimePicker && <TimePicker />}
          {BigPlusOpen ? (
            <div className="fixed w-full  top-0 z-[120] ">
              <motion.div
                animate={{ opacity: [0, 0.5, 1] }}
                transition={{ duration: 0.3 }}
              >
                <div className="h-screen bg-BigPlus ">
                  <div className="flex justify-center">
                    <div className="bg-primary-200 w-[60px] h-[60px] rounded-full fixed bottom-[37px] ">
                      <div
                        onClick={() => {
                          closeBigPlusPage();
                        }}
                      >
                        <svg
                          width="25"
                          height="25"
                          viewBox="0 0 16 16"
                          fill="none"
                          xmlns="http://www.w3.org/2000/svg"
                          className={`mx-auto mt-[16px] transition-all ${
                            BigPlusRotateIcon ? " rotate-45" : " rotate-0"
                          } `}
                        >
                          <path
                            d="M14 6H10V2C10 1.46957 9.78929 0.960859 9.41421 0.585786C9.03914 0.210714 8.53043 0 8 0C7.46957 0 6.96086 0.210714 6.58579 0.585786C6.21071 0.960859 6 1.46957 6 2L6.071 6H2C1.46957 6 0.960859 6.21071 0.585786 6.58579C0.210714 6.96086 0 7.46957 0 8C0 8.53043 0.210714 9.03914 0.585786 9.41421C0.960859 9.78929 1.46957 10 2 10L6.071 9.929L6 14C6 14.5304 6.21071 15.0391 6.58579 15.4142C6.96086 15.7893 7.46957 16 8 16C8.53043 16 9.03914 15.7893 9.41421 15.4142C9.78929 15.0391 10 14.5304 10 14V9.929L14 10C14.5304 10 15.0391 9.78929 15.4142 9.41421C15.7893 9.03914 16 8.53043 16 8C16 7.46957 15.7893 6.96086 15.4142 6.58579C15.0391 6.21071 14.5304 6 14 6Z"
                            fill="white"
                          />
                        </svg>
                      </div>
                    </div>
                  </div>
                  <div className="fixed bottom-[110px] w-full px-3 ">
                    <Link href={"/shifts/complete-shift"}>
                      <div
                        className="bg-secondary-200 p-3 my-2  w-full rounded-full"
                        onClick={() => closeBigPlusPage()}
                      >
                        <p className="mb-0 text-center text-white">بستن شیفت</p>
                      </div>
                    </Link>

                    <div className="flex justify-between w-full">
                      <Link href={"/dsdasd"}>
                        <div
                          className="w-full p-3 rounded-full bg-secondaryDark-100 px-4"
                          onClick={() => closeBigPlusPage()}
                        >
                          <p className="mb-0 text-white">
                            افزودن خرید جدیـــــد
                          </p>
                        </div>
                      </Link>

                      <Link href={"/tasks/add-task?new=true"}>
                        <div
                          className="w-full p-3  rounded-full bg-secondaryDark-100 px-4"
                          onClick={() => closeBigPlusPage()}
                        >
                          <p className="mb-0 text-white">افزودن وظیفه جدید</p>
                        </div>
                      </Link>
                    </div>
                  </div>
                </div>
              </motion.div>
            </div>
          ) : (
            ""
          )}
        </body>
      </html>
    </AppContext.Provider>
  );
}
