<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>LinkUp</title>
  <link rel="stylesheet" type="text/css" href="style.css">
  <script type="module" src="./app.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/markdown-it/dist/markdown-it.min.js"></script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/styles/atom-one-dark.min.css">
  <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/highlight.min.js"></script>
</head>
<body>
  <header>
    <pear-ctrl></pear-ctrl>
    <div id="linkup-text">LinkUp | Peers: <span id="peers-count">0</span></div>
  </header>
  <main>
    <div id="sidebar">
      <ul id="guild-list" class="list-group">
        <!-- Guild list will be populated dynamically -->
      </ul>
      <button id="toggle-setup-btn">Create/Join Guild</button>
    </div>
    <div id="content">
      <div id="register" class="hidden">
        <form id="register-form">
          <input required id="reg-username" type="text" placeholder="Username" />
          <input type="file" id="avatar-file" accept="image/*" style="display: none;" />
          <button type="button" id="select-avatar">Select Avatar</button>
          <input type="submit" value="Register" />
        </form>
      </div>
      <div id="setup" class="hidden">
        <div id="user-info">
          <!-- User info will be populated dynamically -->
        </div>
        <button id="create-guild-btn">Create Guild</button>
        <div id="or">- or -</div>
        <div id="join-guild-container">
          <label for="join-guild-topic">Guild Topic:</label>
          <input type="text" id="join-guild-topic" placeholder="guild topic">
          <button id="join-guild">Join Guild</button>
        </div>
      </div>
      <div id="chat" class="hidden">
        <div id="header">
          <div id="details">
            <div style="display: inline;">
              <strong><span id="chat-room-name"></span></strong> | <a href="#" id="copy-topic-link" class="mini-button">Copy Topic</a>
              <span id="chat-room-topic" style="display: none;"></span>
              <span id="chat-guild-topic" style="display: none;"></span>
              <span id="chat-guild-name" style="display: none;"></span>
            </div>
          </div>
        </div>
        <div id="messages-container">
          <div id="messages"></div>
        </div>
        <form id="message-form">
          <textarea id="message" rows="4"></textarea>
          <input type="file" id="file-input" style="display:none;">
          <button type="button" id="attach-file">Attach File</button>
          <button type="button" id="talk-btn">Talk</button>
          <input type="submit" value="Send" />
        </form>
        <button id="remove-room-btn">Leave Room</button>
      </div>
      <div id="loading" class="hidden">Loading ...</div>
    </div>
  </main>

  <!-- Create Guild Modal -->
  <div id="create-guild-modal" class="modal hidden">
    <div class="modal-content">
      <span class="close-btn" id="close-create-guild-modal">&times;</span>
      <h2>Create Guild</h2>
      <form id="create-guild-form">
        <label for="guild-name">Guild Name:</label>
        <input type="text" id="guild-name" required>
        <button type="submit">Create</button>
      </form>
    </div>
  </div>

  <!-- Manage Guild Modal -->
  <div id="manage-guild-modal" class="modal hidden">
    <div class="modal-content">
      <span class="close-btn" id="close-manage-guild-modal">&times;</span>
      <h2>Manage Guild</h2>
      <div id="guild-info">
        <!-- Guild info will be populated dynamically -->
      </div>
      <button id="copy-guild-id" class="mini-button">Copy Guild ID</button>
      <form id="add-room-form">
        <label for="room-name">Room Name:</label>
        <input type="text" id="room-name" required>
        <button type="submit">Add Room</button>
      </form>
      <ul id="room-list">
        <!-- Room list will be populated dynamically -->
      </ul>
    </div>
  </div>

  <script>
    document.addEventListener('DOMContentLoaded', function() {
      const messageInput = document.getElementById('message');
      const copyTopicLink = document.getElementById('copy-topic-link');
      const chatRoomTopic = document.getElementById('chat-room-topic');
      const copyGuildIdButton = document.getElementById('copy-guild-id');

      if (messageInput) {
        messageInput.addEventListener('keydown', function(event) {
          if (event.key === 'Enter' && !event.shiftKey) {
            event.preventDefault();
            document.getElementById('message-form').dispatchEvent(new Event('submit'));
          }
        });
      }

      if (copyTopicLink) {
        copyTopicLink.addEventListener('click', function(event) {
          event.preventDefault();
          if (chatRoomTopic) {
            const topic = chatRoomTopic.innerText;
            navigator.clipboard.writeText(topic).then(() => {
              console.log('Topic copied to clipboard:', topic);
            }).catch(err => {
              console.error('Failed to copy topic:', err);
            });
          } else {
            console.error('Element #chat-room-topic not found');
          }
        });
      }

      if (copyGuildIdButton) {
        copyGuildIdButton.addEventListener('click', function(event) {
          event.preventDefault();
          const guildTopic = document.getElementById('manage-guild-modal').dataset.guildTopic;
          navigator.clipboard.writeText(guildTopic).then(() => {
            console.log('Guild ID copied to clipboard:', guildTopic);
          }).catch(err => {
            console.error('Failed to copy guild ID:', err);
          });
        });
      }

      const guildList = document.querySelector('#guild-list');
      if (guildList) {
        guildList.addEventListener('click', function(event) {
          const roomItem = event.target.closest('.room-item');
          if (roomItem) {
            const guildTopic = roomItem.dataset.guildTopic;
            const roomTopic = roomItem.dataset.topic;
            switchRoom(guildTopic, roomTopic);
          }
        });
      }

      const createGuildBtn = document.getElementById('create-guild-btn');
      const createGuildModal = document.getElementById('create-guild-modal');
      const closeCreateGuildModal = document.getElementById('close-create-guild-modal');
      const createGuildForm = document.getElementById('create-guild-form');

      createGuildBtn.addEventListener('click', () => {
        createGuildModal.classList.remove('hidden');
      });

      closeCreateGuildModal.addEventListener('click', () => {
        createGuildModal.classList.add('hidden');
      });

      createGuildForm.addEventListener('submit', (event) => {
        event.preventDefault();
        const guildName = document.getElementById('guild-name').value.trim();
        if (guildName) {
          createGuild(guildName);
          createGuildModal.classList.add('hidden');
        }
      });

      const joinGuildBtn = document.getElementById('join-guild');
      joinGuildBtn.addEventListener('click', async (event) => {
        const guildTopic = document.getElementById('join-guild-topic').value.trim();
        if (guildTopic) {
          await joinGuildRequest(guildTopic);
        }
      });

      const manageGuildModal = document.getElementById('manage-guild-modal');
      const closeManageGuildModal = document.getElementById('close-manage-guild-modal');
      const addRoomForm = document.getElementById('add-room-form');
      const roomNameInput = document.getElementById('room-name');

      closeManageGuildModal.addEventListener('click', () => {
        manageGuildModal.classList.add('hidden');
      });

      addRoomForm.addEventListener('submit', (event) => {
        event.preventDefault();
        const roomName = roomNameInput.value.trim();
        const guildTopic = manageGuildModal.dataset.guildTopic;
        if (roomName && guildTopic) {
          addRoomToGuild(guildTopic, roomName);
          roomNameInput.value = '';
        }
      });
    });

    function createGuild(guildName) {
      const event = new CustomEvent('createGuild', { detail: { guildName } });
      document.dispatchEvent(event);
    }

    function addRoomToGuild(guildTopic, roomName) {
      const event = new CustomEvent('addRoomToGuild', { detail: { guildTopic, roomName } });
      document.dispatchEvent(event);
    }

    function manageGuild(guildTopic) {
      const event = new CustomEvent('manageGuild', { detail: { guildTopic } });
      document.dispatchEvent(event);
    }

    function switchRoom(guildTopic, roomTopic) {
      const event = new CustomEvent('switchRoom', { detail: { guildTopic, roomTopic } });
      document.dispatchEvent(event);
    }

    function openManageGuildModal(guildTopic) {
      const manageGuildModal = document.getElementById('manage-guild-modal');
      const guildInfo = document.getElementById('guild-info');
      const roomList = document.getElementById('room-list');

      manageGuildModal.dataset.guildTopic = guildTopic;
      guildInfo.innerHTML = `<h3>${config.guilds[guildTopic].alias}</h3>`;
      roomList.innerHTML = '';

      config.guilds[guildTopic].rooms.forEach(room => {
        const roomItem = document.createElement('li');
        roomItem.textContent = room.alias;
        roomItem.dataset.guildTopic = guildTopic;
        roomItem.dataset.topic = room.topic;

        roomItem.addEventListener('dblclick', () => enterEditMode(roomItem, guildTopic));
        roomItem.addEventListener('click', () => switchRoom(guildTopic, room.topic));

        roomList.appendChild(roomItem);
      });

      manageGuildModal.classList.remove('hidden');
    }
  </script>
</body>
</html>