---
import AdminLayout from '@/layouts/AdminLayout.astro';
import SocialLinksPage from '@/components/admin/pages/SocialLinksPage.astro';
import { requireAdmin, adminRedirectPath } from '@/lib/auth/admin';
import { getPageLocale } from '@/lib/pages';
import {
  SOCIAL_LINK_KEYS,
  getSocialLinks,
  setSocialLinks,
  validateSocialLink,
  type SocialLinkKey,
  type SocialLinks,
} from '@/lib/settings';

export const prerender = false;

const lang = getPageLocale(Astro.currentLocale);

const guard = requireAdmin(Astro.locals);
if (guard.status !== 'ok') {
  return Astro.redirect(adminRedirectPath(guard, lang, Astro.url.pathname));
}

let social = await getSocialLinks();
let error: string | null = null;

if (Astro.request.method === 'POST') {
  const formData = await Astro.request.formData();

  const values: Partial<SocialLinks> = {};
  for (const field of Object.keys(SOCIAL_LINK_KEYS) as SocialLinkKey[]) {
    values[field] = String(formData.get(field) ?? '').trim();
  }
  social = { ...social, ...values };

  for (const field of Object.keys(SOCIAL_LINK_KEYS) as SocialLinkKey[]) {
    const validationError = validateSocialLink(values[field] ?? '', lang);
    if (validationError) {
      error = validationError;
      break;
    }
  }

  if (!error) {
    await setSocialLinks(values);
    return Astro.redirect(`${Astro.url.pathname}?success=saved`);
  }
}

const title = lang === 'ar' ? 'وسائل التواصل الاجتماعي' : 'Social media';
---

<AdminLayout locale={lang} title={title} user={guard.user}>
  <SocialLinksPage lang={lang} social={social} error={error} />
</AdminLayout>
