import React, { useEffect, useState } from "react";
import moment from "moment";
import { formatNumber, getDateDifferenceInDays } from "../../utils/dateUtils";
import { useNavigate } from "react-router-dom";
import { useProjectDetails, useUpdateProject } from "../../hooks/useProjects";
import ManageProjectInfo from "./ManageProjectInfo";
import ProjectRepository from "../../repositories/ProjectRepository";
import { cacheData, getCachedData } from "../../slices/apiDataManager";
import showToast from "../../services/toastService";
import { useHasUserPermission } from "../../hooks/useHasUserPermission";
import { MANAGE_PROJECT } from "../../utils/constants";
import {
getProjectStatusColor,
getProjectStatusName,
} from "../../utils/projectStatus";
import GlobalModel from "../common/GlobalModel";
import { useDispatch } from "react-redux";
import { setProjectId } from "../../slices/localVariablesSlice";
const ProjectCard = ({ projectData, recall }) => {
const [projectInfo, setProjectInfo] = useState(projectData);
const { projects_Details, loading, error, refetch } = useProjectDetails(
projectInfo?.id, false
);
const [showModal, setShowModal] = useState(false);
const dispatch = useDispatch()
const navigate = useNavigate();
const ManageProject = useHasUserPermission(MANAGE_PROJECT);
const {
mutate: updateProject,
isPending,
isSuccess,
isError,
} = useUpdateProject({
onSuccessCallback: () => {
setShowModal(false);
},
})
useEffect(() => {
setProjectInfo(projectData);
}, [projectData])
const handleShow = async () => {
try {
const { data } = await refetch();
setShowModal(true);
} catch (err) {
showToast("Failed to load project details", "error");
}
};
const getProgress = (planned, completed) => {
return (completed * 100) / planned + "%";
};
const getProgressInNumber = (planned, completed) => {
return (completed * 100) / planned;
};
const handleClose = () => setShowModal(false);
const handleViewProject = () => {
dispatch(setProjectId(projectInfo.id))
navigate(`/projects/details`);
};
const handleViewActivities = () => {
dispatch(setProjectId(projectInfo.id))
navigate(`/activities/records?project=${projectInfo.id}`);
};
const handleFormSubmit = (updatedProject) => {
if (projectInfo?.id) {
updateProject({
projectId: projectInfo.id,
updatedData: updatedProject,
});
}
};
return (
<>
{showModal && projects_Details && (
Contact Person:{" "} {projectInfo.contactPerson ? projectInfo.contactPerson : "NA"}
Start Date: {projectInfo.startDate ? moment(projectInfo.startDate).format("DD-MMM-YYYY") : "NA"}
Deadline: {projectInfo.endDate ? moment(projectInfo.endDate).format("DD-MMM-YYYY") : "NA"}
{projectInfo.projectAddress}
{getProjectStatusName(projectInfo.projectStatusId)}
{" "} {getDateDifferenceInDays(projectInfo.endDate, Date()) >= 0 && ( {projectInfo.endDate && getDateDifferenceInDays(projectInfo.endDate, Date())}{" "} Days left )} {getDateDifferenceInDays(projectInfo.endDate, Date()) < 0 && ( {projectInfo.endDate && getDateDifferenceInDays(projectInfo.endDate, Date())}{" "} Days overdue )}