import CalendarWeek from "./CalendarWeek";
import React, { useState, useEffect } from "react";
import { useParams } from "react-router-dom";
import "../styles/ResultEnd.css";
import "../styles/CalendarWeek.css";
import axios from "axios";
import PasswordModal from "./PasswordModal.jsx";

export default function ResultEndForm() {
  const [meetingData, setMeetingData] = useState(null);
  const [selectedDate, setSelectedDate] = useState("");
  const possibleDates = ["23.07.01 ~~~", "23.07.02 ~~~", "23.07.03 ~~~"];
  const [hoveredInfo, setHoveredInfo] = useState(null);
  const { meeting_id } = useParams();
  const [isModalOpen, setIsModalOpen] = useState(false);
  const purposeText = {
    STUDY: "스터디",
    MEETING: "회의",
    PLAYING: "놀기",
    FOOD: "식사",
    ETC: "기타",
  };

  const handleDateChange = (event) => {
    setSelectedDate(event.target.value);
  };
  useEffect(() => {
    const fetchMeetingData = async () => {
      try {
        const response = await fetch(`/meetings/${meeting_id}/details`);
        if (!response.ok) {
          throw new Error("API 호출 오류");
        }
        const data = await response.json();
        setMeetingData(data);

        setSelectedDate(
          data.participants[0].availableSchedules[0].availableDate
        );
      } catch (error) {
        console.error("API 호출 중 에러 발생:", error);
      }
    };

    if (meeting_id) {
      fetchMeetingData();
    }
  }, [meeting_id]);

  if (!meetingData) {
    return <div>로딩 중...</div>;
  }
  const closeMeeting = () => {
    setIsModalOpen(true);
  };

  const handleModalClose = () => {
    setIsModalOpen(false);
  };
  const handlePasswordSubmit = async (password) => {
    setIsModalOpen(false);
    try {
      const response = await axios.patch(
        `http://localhost:3000/meetings/${meeting_id}/confirm-time`,
        {
          adminPassword: password,
        }
      );

      if (response.data && response.data.confirmedTime) {
        setMeetingData((prevData) => ({
          ...prevData,
          confirmedTime: response.data.confirmedTime,
        }));
      }
    } catch (error) {
      if (error.response && error.response.status === 401) {
        alert("비밀번호가 틀렸습니다.");
      } else {
        console.error("오류 발생:", error);
      }
    }
  };

  return (
    <div
      style={{
        textAlign: "center",
        display: "flex",
        flexDirection: "column",
        alignItems: "center",
      }}
    >
      <span className="column-container">
        <h1 className="title-box">{meetingData.title}</h1>
        <p>투표가 종료되었습니다.</p>

        {meetingData.confirmedTime && (
          <div>
            <p style={{ color: "blue" }}>약속 시간은 {selectedDate}입니다.</p>
            <div>
              <h2 style={{ justifyContent: "center" }}>총 참여한 인원수</h2>
              <h3>{meetingData.currentParticipants}</h3>
            </div>
          </div>
        )}
        {!meetingData.confirmedTime && (
          <span className="closedFalse">
            <p>
              {meetingData.purpose && purposeText[meetingData.purpose]}를 하는
              다른 사람들은 주로 평일 낮 시간대에 많이 만나요
            </p>

            <form className="form-container">
              {possibleDates.map((date, index) => (
                <label key={index}>
                  <input
                    type="radio"
                    name="date"
                    value={date}
                    checked={selectedDate === date}
                    onChange={handleDateChange}
                  />
                  {date}
                </label>
              ))}
            </form>

            <button
              style={{ marginTop: "20px", padding: "10px 20px" }}
              onClick={closeMeeting}
            >
              이 시간으로 정했어요
            </button>
            <button style={{ marginTop: "10px", padding: "10px 20px" }}>
              랜덤으로 약속 시간 확정하기
            </button>
          </span>
        )}
      </span>
      <PasswordModal
        isOpen={isModalOpen}
        onRequestClose={handleModalClose}
        onSubmit={handlePasswordSubmit}
      />
      <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>
      <div 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>
        )}
      </div>
    </div>
  );
}