// Device Management - Token copy and regeneration
// Procedural style with proper types (no OOP)

interface RegenerateTokenResponse {
  message: string;
  auth_token: string;
  device: {
    id: string;
    device_name: string;
    device_type: string;
    auth_token: string;
    sync_enabled: boolean;
    auto_sync: boolean;
    sync_frequency_minutes: number;
  };
  sync_urls?: {
    sync_url?: string;
    markup?: string;
    bookmark?: string;
    init?: string;
    progress?: string;
    metadata?: string;
    bookmarks?: string;
  };
}

// Copy sync URL or auth token to clipboard
function copyToClipboard(text: string, label: string): void {
  navigator.clipboard
    .writeText(text)
    .then(() => {
      const toast = (window as any).showToast;
      if (toast) {
        toast.success(`${label} copied to clipboard`);
      }
    })
    .catch((err: unknown) => {
      console.error("Failed to copy:", err);
      const toast = (window as any).showToast;
      if (toast) {
        toast.error("Failed to copy to clipboard");
      }
    });
}

// Regenerate device token with confirmation
function regenerateDeviceToken(deviceId: string, event: Event): void {
  const confirmation =
    "⚠️ This will revoke current token and generate a new one.\n\n" +
    "The old token will immediately stop working.\n\n" +
    "You will need to update your device configuration with new token.\n\n" +
    "Continue?";

  if (!confirm(confirmation)) {
    return;
  }

  const btn = event.target as HTMLButtonElement;
  const originalText = btn.innerHTML;
  btn.disabled = true;
  btn.innerHTML = "🔄 Regenerating...";

  const token = localStorage.getItem("token");
  fetch(`/api/devices/${deviceId}/regenerate-token`, {
    method: "PUT",
    headers: {
      "Content-Type": "application/json",
      Authorization: `Bearer ${token}`,
    },
  })
    .then((response: Response) => {
      if (!response.ok) {
        throw new Error("Failed to regenerate token");
      }
      return response.json() as Promise<RegenerateTokenResponse>;
    })
    .then((_data: RegenerateTokenResponse) => {
      const toast = (window as any).showToast;
      if (toast) {
        toast.success(
          "Token regenerated successfully - update your device config",
        );
      }
      // Reload page to show new token
      setTimeout(() => location.reload(), 1500);
    })
    .catch((error: unknown) => {
      console.error("Error:", error);
      const toast = (window as any).showToast;
      if (toast) {
        toast.error("Failed to regenerate token");
      }
      if (btn) {
        btn.disabled = false;
        btn.innerHTML = originalText;
      }
    });
}

// Export functions for global access (called from template onclick attributes)
window.copyToClipboard = copyToClipboard;
window.regenerateDeviceToken = regenerateDeviceToken;
