import prisma from "@/lib/prisma";
import SettingsForm from "./SettingsForm";
import {
  MESSAGING_PLATFORM_FEE,
  LIVECAM_PLATFORM_FEE,
} from "@/lib/constants/fees";

const SETTING_CATEGORIES: Record<string, string[]> = {
  "Site Settings": [
    "site_name",
    "site_tagline",
    "site_url",
    "site_logo",
    "site_favicon",
    "contact_email",
    "support_email",
    "default_currency",
    "default_language",
  ],
  "Commission Settings": [
    "messaging_fee_percent",
    "livecam_fee_percent",
  ],
  "Registration Settings": [
    "allow_new_registrations",
    "require_email_verification",
  ],
  "Content Settings": [
    "default_profile_photo",
    "nsfw_content_moderation",
    "require_photo_moderation",
    "max_upload_size_mb",
    "banned_words",
  ],
  "Maintenance Mode": [
    "maintenance_mode",
    "maintenance_message",
  ],
  SEO: [
    "meta_title",
    "meta_description",
    "meta_keywords",
    "og_image",
    "robots_txt",
    "google_analytics_id",
    "google_tag_manager_id",
  ],
  Safety: [
    "min_age",
    "auto_ban_threshold",
  ],
  Email: [
    "smtp_host",
    "smtp_port",
    "smtp_user",
    "smtp_from_name",
    "smtp_from_email",
    "email_footer_text",
  ],
  Legal: [
    "terms_of_service_url",
    "privacy_policy_url",
    "cookie_policy_url",
    "gdpr_contact_email",
    "age_disclaimer",
    "2257_statement",
  ],
};

// Fields that should render as toggle switches
const TOGGLE_FIELDS = [
  "maintenance_mode",
  "allow_new_registrations",
  "require_email_verification",
  "nsfw_content_moderation",
  "require_photo_moderation",
];

// Fields that should render as textarea
const TEXTAREA_FIELDS = [
  "banned_words",
  "maintenance_message",
  "age_disclaimer",
  "2257_statement",
  "email_footer_text",
  "meta_description",
  "meta_keywords",
];

// Fields that should be read-only (display-only info derived from constants)
const READONLY_FIELDS = [
  "messaging_fee_percent",
  "livecam_fee_percent",
];

export default async function AdminSettingsPage() {
  const settings = await prisma.website.findMany({
    orderBy: { key: "asc" },
  });

  const settingsMap: Record<string, string> = {};
  for (const s of settings) {
    settingsMap[s.key] = s.value ?? "";
  }

  // Inject commission rates from constants as display values
  if (!settingsMap["messaging_fee_percent"]) {
    settingsMap["messaging_fee_percent"] = String(MESSAGING_PLATFORM_FEE * 100);
  }
  if (!settingsMap["livecam_fee_percent"]) {
    settingsMap["livecam_fee_percent"] = String(LIVECAM_PLATFORM_FEE * 100);
  }

  // Set defaults for toggle fields
  if (!settingsMap["allow_new_registrations"]) {
    settingsMap["allow_new_registrations"] = "true";
  }
  if (!settingsMap["require_email_verification"]) {
    settingsMap["require_email_verification"] = "true";
  }
  if (!settingsMap["nsfw_content_moderation"]) {
    settingsMap["nsfw_content_moderation"] = "true";
  }
  if (!settingsMap["maintenance_mode"]) {
    settingsMap["maintenance_mode"] = "false";
  }

  return (
    <div className="space-y-6">
      <div className="flex items-center justify-between">
        <div>
          <h1 className="text-2xl font-bold">System Settings</h1>
          <p className="text-text-muted text-sm mt-1">
            Configure site-wide settings, commissions, registration rules, and maintenance mode.
          </p>
        </div>
      </div>
      <SettingsForm
        categories={SETTING_CATEGORIES}
        initialValues={settingsMap}
        toggleFields={TOGGLE_FIELDS}
        textareaFields={TEXTAREA_FIELDS}
        readonlyFields={READONLY_FIELDS}
      />
    </div>
  );
}
