// import React, { useState, useEffect } from "react";
// import CalendarWeek from "./CalendarWeek";
// import { useNavigate, useParams } from "react-router-dom";
// import axios from "axios";

// import "../styles/ResultMake.css";
// function ResultMakeForm() {
//   const [meetingData, setMeetingData] = useState(null);
//   const { meeting_id } = useParams();
//   const { currentParticipants, maxParticipants } = meetingData || {};
//   const navigate = useNavigate();
//   const [timeLeft, setTimeLeft] = useState("");
//   const [hoveredInfo, setHoveredInfo] = useState(null);
//   const [isLoading, setIsLoading] = useState(true); // 로딩 상태 관리
//   const [isModalOpen, setIsModalOpen] = useState(false);

//   useEffect(() => {
//     // 서버에서 미팅 데이터를 가져오는 함수
//     const fetchMeetingData = async () => {
//       setIsLoading(true);
//       try {
//         const response = await axios.get(
//           `http://localhost:3000/meetings/${meeting_id}/details`,
//           {
//             withCredentials: true,
//           }
//         );
//         setMeetingData(response.data);
//         setIsLoading(false);
//       } catch (error) {
//         console.error("데이터 로딩 에러:", error);
//         setIsLoading(false);
//       }
//     };

//     fetchMeetingData();
//   }, [meeting_id]);

//   // 타이머를 시작하고 관리하는 로직
//   useEffect(() => {
//     const calculateTimeLeft = () => {
//       if (!meetingData || !meetingData.voteExpiresAt) {
//         // meetingData나 voteExpiresAt이 없는 경우 기본값을 반환
//         return {
//           days: 0,
//           hours: 0,
//           minutes: 0,
//           seconds: 0,
//         };
//       }
//       const now = new Date();
//       const voteExpires = new Date(meetingData.voteExpiresAt);
//       const difference = voteExpires - now;

//       if (difference > 0) {
//         return {
//           days: Math.floor(difference / (1000 * 60 * 60 * 24)),
//           hours: Math.floor((difference / (1000 * 60 * 60)) % 24),
//           minutes: Math.floor((difference / 1000 / 60) % 60),
//           seconds: Math.floor((difference / 1000) % 60),
//         };
//       } else {
//         // 시간이 이미 지난 경우 기본값을 반환
//         return {
//           days: 0,
//           hours: 0,
//           minutes: 0,
//           seconds: 0,
//         };
//       }
//     };

//     const updateTimer = () => {
//       const newTimeLeft = calculateTimeLeft() || {}; // newTimeLeft가 undefined인 경우를 대비해 기본 객체 할당
//       const formattedTime = `${
//         newTimeLeft.days ? newTimeLeft.days + "일 " : ""
//       }${newTimeLeft.hours ? newTimeLeft.hours + "시간 " : ""}${
//         newTimeLeft.minutes ? newTimeLeft.minutes + "분 " : ""
//       }${newTimeLeft.seconds ? newTimeLeft.seconds + "초" : ""}`;
//       setTimeLeft(formattedTime);
//     };

//     updateTimer();
//     const timerId = setInterval(updateTimer, 1000);

//     return () => clearInterval(timerId);
//   }, [meetingData]);

//   const handleEdit = async () => {
//     try {
//       const response = await axios.get(
//         `http://localhost:3000/meetings/${meeting_id}/`
//       );
//       const {
//         startDate,
//         endDate,
//         availableVotingStartTime,
//         availableVotingEndTime,
//       } = response.data;

//       try {
//         const scheduleResponse = await axios.get(
//           `http://localhost:3000/meetings/${meeting_id}/my/schedules`
//         );
//         navigate("/UserTimeInfo", {
//           state: {
//             id: meeting_id,
//             startTime: availableVotingStartTime,
//             endTime: availableVotingEndTime,
//             startDate,
//             endDate,
//             schedules: scheduleResponse.data.schedules,
//           },
//         });
//       } catch (error) {
//         console.error(error);
//       }
//     } catch (error) {
//       console.error(error);
//     }
//   };

//   const closeMeeting = async () => {
//     const adminPassword = prompt("관리자 비밀번호를 입력하세요:");

//     if (adminPassword) {
//       try {
//         await axios.post(`http://localhost:3000/meetings/${meeting_id}/close`, {
//           adminPassword,
//         });

//         navigate(`/resultend/${meeting_id}`);
//       } catch (error) {
//         if (error.response && error.response.status === 401) {
//           alert("비밀번호가 틀렸습니다.");
//         } else {
//           console.error("오류 발생:", error);
//         }
//       }
//     }
//   };

//   const handleModalClose = () => {
//     setIsModalOpen(false);
//   };

//   const handlePasswordConfirm = async (password) => {
//     setIsModalOpen(false);
//     try {
//       await axios.post(`http://localhost:3000/meetings/${meeting_id}/close`, {
//         adminPassword: password,
//       });
//       navigate(`/resultend/${meeting_id}`);
//     } catch (error) {
//       if (error.response && error.response.status === 401) {
//         alert("비밀번호가 틀렸습니다.");
//       } else {
//         console.error("오류 발생:", error);
//       }
//     }
//   };

//   return (
//     <>
//       {isLoading ? (
//         <div>Loading...</div>
//       ) : (
//         <div className="column-container">
//           <h1 className="title-box">{meetingData?.title}</h1>

//           <div>
//             현재 완료한 인원수 {currentParticipants}
//             {maxParticipants != null && ` / ${maxParticipants}`}
//           </div>

//           <div>종료까지 남은 시간 {timeLeft}</div>
//           <button onClick={handleEdit}>수정하기</button>
//           <button onClick={closeMeeting}>투표 종료하기</button>
//         </div>
//       )}
//       {meetingData && (
//         <span className="flex-row">
//           <div className="calander-container">
//             <CalendarWeek
//               participants={meetingData.participants}
//               startDate={meetingData.startDate}
//               endDate={meetingData.endDate}
//               currentParticipants={meetingData.currentParticipants}
//               maxParticipants={meetingData.maxParticipants}
//               hoveredInfo={hoveredInfo}
//               setHoveredInfo={setHoveredInfo}
//               availableVotingStartTime={meetingData.availableVotingStartTime}
//               availableVotingEndTime={meetingData.availableVotingEndTime}
//             />
//           </div>

//           <span className="mostTime">
//             <div style={{ textAlign: "center" }}>
//               가장 많은 사람들이 가능한 일정
//             </div>
//             <ol>//일정 5개 나열</ol>
//           </span>
//           <span className="possible">
//             {!hoveredInfo && (
//               <div>
//                 <strong>가능한 사람들이 표시됩니다.</strong>
//                 <p>마우스를 달력 위에 올려보세요!</p>
//               </div>
//             )}

//             {hoveredInfo && (
//               <div style={{ textAlign: "center" }}>
//                 <strong>
//                   {hoveredInfo.date} {hoveredInfo.time}에 가능한 사람:
//                 </strong>
//                 <ul>
//                   {hoveredInfo.participants.map((name) => (
//                     <li key={name}>{name}</li>
//                   ))}
//                 </ul>
//               </div>
//             )}
//           </span>
//         </span>
//       )}
//     </>
//   );
// }
// export default ResultMakeForm;
import React, { useState, useEffect } from "react";
import CalendarWeek from "./CalendarWeek";
import PasswordModal from "./PasswordModal";
import { useNavigate, useParams } from "react-router-dom";
import axios from "axios";

import "../styles/ResultMake.css";

function ResultMakeForm() {
  const [meetingData, setMeetingData] = useState(null);
  const { meeting_id } = useParams();
  const navigate = useNavigate();
  const [timeLeft, setTimeLeft] = useState("");
  const [hoveredInfo, setHoveredInfo] = useState(null);
  const [isLoading, setIsLoading] = useState(true);
  const [isModalOpen, setIsModalOpen] = useState(false);

  useEffect(() => {
    const fetchMeetingData = async () => {
      setIsLoading(true);
      try {
        const response = await axios.get(
          `http://localhost:3000/meetings/${meeting_id}/details`,
          { withCredentials: true }
        );
        setMeetingData(response.data);
        setIsLoading(false);
      } catch (error) {
        console.error("데이터 로딩 에러:", error);
        setIsLoading(false);
      }
    };

    fetchMeetingData();
  }, [meeting_id]);

  useEffect(() => {
    const calculateTimeLeft = () => {
      if (!meetingData || !meetingData.voteExpiresAt) {
        return { days: 0, hours: 0, minutes: 0, seconds: 0 };
      }
      const now = new Date();
      const voteExpires = new Date(meetingData.voteExpiresAt);
      const difference = voteExpires - now;

      if (difference > 0) {
        return {
          days: Math.floor(difference / (1000 * 60 * 60 * 24)),
          hours: Math.floor((difference / (1000 * 60 * 60)) % 24),
          minutes: Math.floor((difference / 1000 / 60) % 60),
          seconds: Math.floor((difference / 1000) % 60),
        };
      } else {
        return { days: 0, hours: 0, minutes: 0, seconds: 0 };
      }
    };

    const updateTimer = () => {
      const newTimeLeft = calculateTimeLeft();
      const formattedTime = `${
        newTimeLeft.days ? newTimeLeft.days + "일 " : ""
      }${newTimeLeft.hours ? newTimeLeft.hours + "시간 " : ""}${
        newTimeLeft.minutes ? newTimeLeft.minutes + "분 " : ""
      }${newTimeLeft.seconds ? newTimeLeft.seconds + "초" : ""}`;
      setTimeLeft(formattedTime);
    };

    const timerId = setInterval(updateTimer, 1000);
    return () => clearInterval(timerId);
  }, [meetingData]);
  const handleEdit = async () => {
    try {
      const response = await axios.get(
        `http://localhost:3000/meetings/${meeting_id}/`
      );
      const {
        startDate,
        endDate,
        availableVotingStartTime,
        availableVotingEndTime,
      } = response.data;

      try {
        const scheduleResponse = await axios.get(
          `http://localhost:3000/meetings/${meeting_id}/my/schedules`
        );
        navigate("/UserTimeInfo", {
          state: {
            id: meeting_id,
            startTime: availableVotingStartTime,
            endTime: availableVotingEndTime,
            startDate,
            endDate,
            schedules: scheduleResponse.data.schedules,
          },
        });
      } catch (error) {
        console.error(error);
      }
    } catch (error) {
      console.error(error);
    }
  };

  const closeMeeting = () => {
    setIsModalOpen(true);
  };

  const handleModalClose = () => {
    setIsModalOpen(false);
  };

  const handlePasswordSubmit = async (password) => {
    setIsModalOpen(false);
    try {
      await axios.post(`http://localhost:3000/meetings/${meeting_id}/close`, {
        adminPassword: password,
      });
      navigate(`/resultend/${meeting_id}`);
    } catch (error) {
      if (error.response && error.response.status === 401) {
        alert("비밀번호가 틀렸습니다.");
      } else {
        console.error("오류 발생:", error);
      }
    }
  };

  return (
    <>
      {isLoading ? (
        <div>Loading...</div>
      ) : (
        <div className="column-container">
          <h1 className="title-box">{meetingData?.title}</h1>
          <div>
            현재 완료한 인원수 {meetingData?.currentParticipants} /{" "}
            {meetingData?.maxParticipants}
          </div>
          <div>종료까지 남은 시간 {timeLeft}</div>
          <button onClick={handleEdit}>수정하기</button>
          <button onClick={closeMeeting}>투표 종료하기</button>
        </div>
      )}
      {meetingData && (
        <div className="flex-row">
          <CalendarWeek
            participants={meetingData.participants}
            startDate={meetingData.startDate}
            endDate={meetingData.endDate}
            currentParticipants={meetingData.currentParticipants}
            maxParticipants={meetingData.maxParticipants}
            hoveredInfo={hoveredInfo}
            setHoveredInfo={setHoveredInfo}
            availableVotingStartTime={meetingData.availableVotingStartTime}
            availableVotingEndTime={meetingData.availableVotingEndTime}
          />
        </div>
      )}
      <PasswordModal
        isOpen={isModalOpen}
        onRequestClose={handleModalClose}
        onSubmit={handlePasswordSubmit}
      />
      <span className="mostTime">
        <div style={{ textAlign: "center" }}>
          가장 많은 사람들이 가능한 일정
        </div>
        <ol>//일정 5개 나열</ol>
      </span>
      <span className="possible">
        {!hoveredInfo && (
          <div>
            <strong>가능한 사람들이 표시됩니다.</strong>
            <p>마우스를 달력 위에 올려보세요!</p>
          </div>
        )}

        {hoveredInfo && (
          <div style={{ textAlign: "center" }}>
            <strong>
              {hoveredInfo.date} {hoveredInfo.time}에 가능한 사람:
            </strong>
            <ul>
              {hoveredInfo.participants.map((name) => (
                <li key={name}>{name}</li>
              ))}
            </ul>
          </div>
        )}
      </span>
    </>
  );
}

export default ResultMakeForm;