"use strict";

const SESSION_CREDENTIAL_KEY = "stonk_external_login_session_credentials";
const AUTO_LOGIN_SETTING = "stonk_auto_login_enabled";
const AUTO_LOGIN_DISABLED_SETTING = "stonk_auto_login_disabled";

const form = document.getElementById("credentialForm");
const accountInput = document.getElementById("account");
const passwordInput = document.getElementById("password");
const saveButton = document.getElementById("saveCredentials");
const clearButton = document.getElementById("clearCredentials");
const toggleButton = document.getElementById("togglePassword");
const state = document.getElementById("credentialState");
const message = document.getElementById("credentialMessage");

function setMessage(content, type = "") {
  message.className = `message${type ? ` ${type}` : ""}`;
  message.textContent = content;
}

function setReady(ready) {
  state.classList.toggle("ready", ready);
  state.textContent = ready ? "Đã sẵn sàng" : "Chưa lưu";
}

function postStatus(ready, action = "loaded") {
  window.parent.postMessage({
    source: "stonk-external-session-login",
    type: "STONK_EXTERNAL_SESSION_LOGIN_STATUS",
    ready: ready === true,
    action
  }, "*");
}

async function readCredentials() {
  try {
    const localStored = await chrome.storage.local.get([SESSION_CREDENTIAL_KEY]);
    let credentials = localStored?.[SESSION_CREDENTIAL_KEY];
    if (!credentials) {
      const sessionStored = await chrome.storage.session?.get?.([SESSION_CREDENTIAL_KEY]).catch(() => ({}));
      credentials = sessionStored?.[SESSION_CREDENTIAL_KEY];
    }
    const account = typeof credentials?.account === "string" ? credentials.account.trim() : "";
    const ready = Boolean(account && credentials?.password);
    if (ready) accountInput.value = account;
    setReady(ready);
    postStatus(ready);
    return credentials || null;
  } catch {
    setReady(false);
    setMessage("Không thể đọc bộ nhớ đăng nhập.", "err");
    postStatus(false);
    return null;
  }
}

toggleButton.addEventListener("click", () => {
  const visible = passwordInput.type === "text";
  passwordInput.type = visible ? "password" : "text";
  toggleButton.textContent = visible ? "Hiện" : "Ẩn";
  toggleButton.setAttribute("aria-label", visible ? "Hiện mật khẩu" : "Ẩn mật khẩu");
  toggleButton.setAttribute("aria-pressed", String(!visible));
});

form.addEventListener("submit", async event => {
  event.preventDefault();
  const account = accountInput.value.trim();
  if (!account) {
    setMessage("Hãy nhập số điện thoại hoặc email.", "err");
    accountInput.focus();
    return;
  }
  const originalLabel = saveButton.textContent;
  saveButton.disabled = true;
  saveButton.textContent = "Đang lưu…";
  try {
    const stored = await chrome.storage.local.get([SESSION_CREDENTIAL_KEY]);
    const current = stored?.[SESSION_CREDENTIAL_KEY] || null;
    const enteredPassword = passwordInput.value;
    const password = enteredPassword || (current?.account === account ? current?.password : "");
    if (!password) {
      setMessage("Hãy nhập mật khẩu cho tài khoản này.", "err");
      passwordInput.focus();
      return;
    }
    const credData = { account, password, savedAt: Date.now() };
    await chrome.storage.local.set({
      [SESSION_CREDENTIAL_KEY]: credData,
      [AUTO_LOGIN_SETTING]: true,
      [AUTO_LOGIN_DISABLED_SETTING]: false
    });
    try { if (chrome.storage?.session?.set) await chrome.storage.session.set({ [SESSION_CREDENTIAL_KEY]: credData }); } catch {}
    passwordInput.value = "";
    setReady(true);
    setMessage("Đã lưu thông tin tự đăng nhập.", "ok");
    postStatus(true, "saved");
  } catch {
    setMessage("Không lưu được thông tin tài khoản.", "err");
  } finally {
    saveButton.disabled = false;
    saveButton.textContent = originalLabel;
  }
});

clearButton.addEventListener("click", async () => {
  clearButton.disabled = true;
  try {
    await chrome.storage.local.remove([SESSION_CREDENTIAL_KEY]);
    try { if (chrome.storage?.session?.remove) await chrome.storage.session.remove([SESSION_CREDENTIAL_KEY]); } catch {}
    form.reset();
    passwordInput.type = "password";
    toggleButton.textContent = "Hiện";
    toggleButton.setAttribute("aria-label", "Hiện mật khẩu");
    toggleButton.setAttribute("aria-pressed", "false");
    setReady(false);
    setMessage("Đã xóa thông tin đăng nhập đã lưu.", "ok");
    postStatus(false, "cleared");
  } catch {
    setMessage("Không xóa được thông tin.", "err");
  } finally {
    clearButton.disabled = false;
  }
});

readCredentials();
