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); // 로딩 상태 관리

  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 = () => {
    navigate("/meetinginfo/linkpage");
  };

  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={() => navigate(`/resultend/${meeting_id}`)}>
            투표 종료하기
          </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;