const els = {
  loginBtn: document.getElementById('google-login-btn'),
  message: document.getElementById('login-message'),
  status: document.getElementById('login-status'),
  statusText: document.getElementById('login-status-text'),
};

let oauthConfigured = false;

init();

async function init() {
  els.loginBtn.addEventListener('click', handleLogin);
  await checkAuthAndConfig();
}

async function checkAuthAndConfig() {
  try {
    const data = await fetchJson('/auth/status');
    oauthConfigured = !!data.configured;

    if (!oauthConfigured) {
      const target = data.mode === 'cloud' ? 'cloud OAuth server' : '.env';
      setStatus('error', `OAuth chưa cấu hình trong ${target}`);
      els.loginBtn.disabled = true;
      showMessage(data.error || 'OAuth chưa sẵn sàng. Liên hệ quản trị viên.', 'error');
      return;
    }

    if (data.authenticated && data.user) {
      setStatus('ok', `Đã đăng nhập: ${data.user.email || data.user.name || ''}`);
      showMessage('Đã đăng nhập. Đang chuyển vào ứng dụng...', 'success');
      setTimeout(() => { window.location.replace('/'); }, 400);
      return;
    }

    setStatus('ok', data.mode === 'cloud' ? 'Cloud OAuth sẵn sàng' : (data.redirectUri ? `Redirect URI: ${data.redirectUri}` : 'OAuth sẵn sàng'));
  } catch (err) {
    setStatus('error', 'Không kết nối được server');
    showMessage(`Lỗi kết nối: ${err.message}`, 'error');
  }
}

function handleLogin() {
  if (!oauthConfigured) return;
  els.loginBtn.disabled = true;
  showMessage('Đang chuyển hướng tới Google...', 'info');
  window.location.href = '/auth/login?return=/';
}

function setStatus(state, text) {
  els.status.dataset.state = state;
  els.statusText.textContent = text;
}

function showMessage(text, type = 'error') {
  els.message.textContent = text;
  els.message.classList.remove('hidden', 'info', 'success');
  if (type === 'info') els.message.classList.add('info');
  if (type === 'success') els.message.classList.add('success');
}

async function fetchJson(url, options) {
  const res = await fetch(url, options);
  const data = await res.json().catch(() => ({}));
  if (!res.ok) throw new Error(data.error || data.message || `HTTP ${res.status}`);
  return data;
}
