// lib/homepage-content.ts
// Homepage content management — supports both Puck editor data and legacy format
import { db } from '@/lib/db';
import { homepageContent } from '@/shared/schema';
import { eq } from 'drizzle-orm';
import type { Data } from '@puckeditor/core';

const SITE_ID = process.env.SITE_ID || 'global-money';

// Default Puck data — represents the initial homepage layout as Puck components
export const DEFAULT_PUCK_DATA: Data = {
  content: [
    {
      type: "HeroSection",
      props: {
        id: "hero-1",
        tagline: "金融リテラシーを高める",
        title: "グローバルマネーウィーク2025へようこそ",
        subtitle: "正しいお金の知識と賢い意思決定力を育てる、日本最大級の金融教育プラットフォーム。",
        bgVideo: "https://ivpjujzzn6hsn5ez.public.blob.vercel-storage.com/websites/Gold_coin_transforms_202604131702.mp4",
        bgImage: "",
        mediaType: "video",
      },
    },
    {
      type: "IconNavGrid",
      props: {
        id: "icon-nav-1",
        items: [
          { label: "入金不要ボーナス", href: "/category/入金不要ボーナス", iconName: "gift" },
          { label: "ボーナス活用術", href: "/category/ボーナス活用術", iconName: "lightbulb" },
          { label: "最新記事", href: "/category/最新記事", iconName: "newspaper" },
          { label: "著者プロフィール", href: "/author/編集部", iconName: "users" },
          { label: "お問い合わせ", href: "/contact", iconName: "mail" },
        ],
      },
    },
    {
      type: "IntroSection",
      props: {
        id: "intro-1",
        title: "正しいお金の知識と賢い意思決定力を育む",
        subtitle: "グローバルマネーウィーク2025.jpは、子どもから大人まで、全ての方に向けた最新の金融教育プラットフォームです。",
        body: "貯金、投資、キャッシュレス決済から中長期の資産形成まで。私たちは金融知識に不安を抱える皆様に対し、信頼性の高い情報とわかりやすい解説コンテンツをお届けします。",
        ctaText: "最新記事で学ぶ",
        ctaHref: "/category/最新記事",
      },
    },
    {
      type: "SectionHeading",
      props: {
        id: "heading-ranked",
        categoryLabel: "RANKING",
        title: "おすすめボーナスランキング",
        subtitle: "当サイトが厳選した、今月最もおすすめのボーナスをランキング形式でご紹介します。",
        align: "center",
      },
    },
    {
      type: "CategoryGrid",
      props: {
        id: "category-grid-1",
        title: "提供する金融教育カテゴリー",
        subtitle: "あなたのライフステージと興味に合わせた情報を見つけてください。",
        items: [
          { label: "入金不要ボーナス", href: "/category/入金不要ボーナス", iconName: "gift" },
          { label: "ボーナス活用術", href: "/category/ボーナス活用術", iconName: "lightbulb" },
          { label: "最新記事一覧", href: "/category/最新記事", iconName: "newspaper" },
          { label: "ブログ", href: "/blogs", iconName: "newspaper" },
        ],
      },
    },
    {
      type: "HighlightCards",
      props: {
        id: "highlights-1",
        title: "情報収集から実践へ",
        subtitle: "本サイトが提供する2つの強力な知識の柱。",
        card1Title: "ボーナスと優遇制度の活用法",
        card1Desc: "入金不要ボーナスや税制優遇（NISAやiDeCoなど）の実践的な活用方法を深く掘り下げます。",
        card1Href: "/category/入金不要ボーナス",
        card2Title: "グローバルな経済視野の獲得",
        card2Desc: "国際的な「Global Money Week」の理念に基づき、海外の経済トレンドや世界の最新インサイトを取り入れます。",
        card2Href: "/category/ボーナス活用術",
      },
    },
    {
      type: "AppPromoSection",
      props: {
        id: "app-promo-1",
        title: "スマートな資産管理ツール",
        subtitle: "アプリを活用して、毎日の資産推移や最新の金融市場をいつでもチェック。",
      },
    },
    {
      type: "StepsTimeline",
      props: {
        id: "steps-1",
        title: "資産形成を始める3ステップ",
        subtitle: "難しそうに見える投資や運用も、順序立てて学べば誰でも実践することができます。",
        steps: [
          { title: "学ぶ・情報収集", description: "まずは本サイトの教育コンテンツで、基本的な経済用語を学びましょう。基礎固めがリスクを最小限に抑えます。" },
          { title: "口座開設・ボーナス獲得", description: "知識が身についたら、実際に証券口座や投資口座を開設します。" },
          { title: "運用スタート・複利の力", description: "少額から運用をスタートさせます。長期間続けることで複利の力が働きます。" },
        ],
      },
    },
    {
      type: "BlogGrid",
      props: {
        id: "blog-grid-1",
        title: "LATEST POSTS",
        count: 4,
        columns: 2,
      },
    },
    {
      type: "AuthorBox",
      props: {
        id: "author-box-1",
        showBio: true,
      },
    },
    {
      type: "BannerCTA",
      props: {
        id: "banner-cta-1",
        headline: "今すぐ無料で始めましょう",
        description: "登録だけで入金不要ボーナスがもらえます。リスクゼロで実際のプレイを体験してみませんか？",
        ctaText: "無料登録する",
        ctaUrl: "#",
        bgImage: "",
      },
    },
  ],
  root: { props: {} },
  zones: {},
};

/**
 * Get homepage content in Puck format
 */
export async function getHomepageContent() {
  try {
    const rows = await db
      .select()
      .from(homepageContent)
      .where(eq(homepageContent.siteId, SITE_ID))
      .limit(1);

    const dbContent = rows[0]?.content as Record<string, any> | null;

    // If DB has Puck data, use it
    if (dbContent?.puckData) {
      return { puckData: dbContent.puckData as Data };
    }

    // Otherwise return defaults
    return { puckData: DEFAULT_PUCK_DATA };
  } catch (error) {
    console.error('Error fetching homepage content:', error);
    return { puckData: DEFAULT_PUCK_DATA };
  }
}

/**
 * Save homepage content (Puck format) to DB
 */
export async function saveHomepageContent(content: Record<string, any>, updatedBy?: string) {
  try {
    const existing = await db
      .select({ id: homepageContent.id })
      .from(homepageContent)
      .where(eq(homepageContent.siteId, SITE_ID))
      .limit(1);

    // Store the full content object (which includes puckData)
    if (existing.length > 0) {
      await db
        .update(homepageContent)
        .set({
          content,
          updatedAt: new Date(),
          updatedBy: updatedBy || null,
        })
        .where(eq(homepageContent.siteId, SITE_ID));
    } else {
      await db
        .insert(homepageContent)
        .values({
          siteId: SITE_ID,
          content,
          updatedBy: updatedBy || null,
        });
    }

    return { success: true };
  } catch (error) {
    console.error('Error saving homepage content:', error);
    return { success: false, error: error instanceof Error ? error.message : 'Unknown error' };
  }
}
