"use client";

import { GeneralSettingsView } from "@/components/dashboard/settings/general-settings-view";
import type { GeneralSettingsTab } from "@/components/dashboard/settings/settings-types";
import { useSearchParams } from "next/navigation";
import { useState, useEffect } from "react";
import { useSiteSettings, updateSiteSettings, generateSitemap } from "@/lib/api/dashboard/settings-api";
import { useRouter } from "next/navigation";
import type { AdminSiteSettings } from "@/components/dashboard/settings/settings-api-types";

function parseGeneralTab(value: string | null): GeneralSettingsTab {
  if (value === "warning") {
    return "warning";
  }

  if (value === "cache") {
    return "cache";
  }

  if (value === "media") {
    return "media";
  }

  return "sitemap";
}

export function GeneralSettingsContainer() {
  const searchParams = useSearchParams();
  const activeTab = parseGeneralTab(searchParams.get("tab"));
  const router = useRouter();

  const { siteSettings, isLoading } = useSiteSettings();
  const [formData, setFormData] = useState<Partial<AdminSiteSettings>>({});
  const [isSaving, setIsSaving] = useState(false);
  const [isGeneratingSitemap, setIsGeneratingSitemap] = useState(false);

  useEffect(() => {
    if (siteSettings) {
      setFormData(siteSettings);
    }
  }, [siteSettings]);

  const handleSave = async () => {
    setIsSaving(true);
    try {
      await updateSiteSettings(formData);
      router.refresh();
    } finally {
      setIsSaving(false);
    }
  };

  const handleGenerateSitemap = async () => {
    setIsGeneratingSitemap(true);
    try {
      await generateSitemap();
    } finally {
      setIsGeneratingSitemap(false);
    }
  };

  return (
    <GeneralSettingsView
      activeTab={activeTab}
      isLoading={isLoading}
      formData={formData}
      onChangeForm={setFormData}
      onSave={handleSave}
      onGenerateSitemap={handleGenerateSitemap}
      isSaving={isSaving}
      isGeneratingSitemap={isGeneratingSitemap}
    />
  );
}
