import Link from "next/link";
import { notFound } from "next/navigation";
import type { Metadata } from "next";
import {
  ArrowLeft,
  BookOpenText,
  BrainCircuit,
  CalendarDays,
  ChartNoAxesCombined,
  CircleCheck,
  Compass,
  FileText,
  GraduationCap,
  Camera,
  Mail,
  MessageCircle,
  Phone,
  Scale,
  ShieldAlert,
  Target,
  UserRound,
  Wrench,
} from "lucide-react";

import { ConsultationForm } from "@/components/consultation-form";
import { PageHero } from "@/components/page-hero";
import { SiteFooter } from "@/components/site-footer";
import { SiteHeader } from "@/components/site-header";
import { Button } from "@/components/ui/button";
import { siteContent } from "@/app/content";
import { safePublishedItems, safeSettings, type CmsItem } from "@/lib/cms";
import { resolveSiteContent } from "@/lib/site-settings";

const pageMeta = {
  courses: { eyebrow: "مسیرهای آموزشی", title: "آموزش برای دانستن نیست؛ برای تصمیم‌گرفتن است.", description: "دوره‌ها به‌گونه‌ای طراحی می‌شوند که مفاهیم، تمرین، مدیریت ریسک و بازخورد را در یک مسیر قابل‌اجرا کنار هم قرار دهند.", icon: GraduationCap },
  coaching: { eyebrow: "کوچینگ معامله‌گری", title: "فاصله میان دانستن و درست اجراکردن را کم کنید.", description: "کوچینگ برای معامله‌گری است که می‌خواهد الگوهای رفتاری و اجرایی خود را ببیند، اصلاح کند و به یک فرآیند منظم برسد.", icon: Target },
  tools: { eyebrow: "ابزارهای معامله‌گر", title: "ابزار خوب، تصمیم را جایگزین نمی‌کند؛ آن را دقیق‌تر می‌کند.", description: "ابزارهای کاربردی مرکز برای مدیریت سرمایه، برنامه‌ریزی معامله و بررسی منظم عملکرد طراحی شده‌اند.", icon: Wrench },
  knowledge: { eyebrow: "دانشنامه ALSTC", title: "یادگیری مداوم، بخشی از کار معامله‌گر است.", description: "مقالات آموزشی، مفاهیم اقتصادی و موضوعات روان‌شناسی معامله‌گری را روشن، کاربردی و بدون هیجان‌زدگی دنبال کنید.", icon: BookOpenText },
  about: { eyebrow: "درباره مرکز", title: "محیطی برای رشد معامله‌گر، نه وعده‌های سریع.", description: "مرکز معاملات آل عصفور با تمرکز بر آموزش، تمرین، بازخورد و مدیریت ریسک، به معامله‌گران کمک می‌کند مسیر حرفه‌ای خود را آگاهانه بسازند.", icon: Compass },
  contact: { eyebrow: "تماس و مشاوره", title: "از یک گفت‌وگوی روشن شروع کنیم.", description: "برای انتخاب مسیر آموزشی، آشنایی با کوچینگ یا پرسش درباره خدمات، یکی از راه‌های ارتباطی را انتخاب کنید.", icon: MessageCircle },
  risk: { eyebrow: "شفافیت و مسئولیت", title: "هشدار ریسک بازارهای مالی", description: "پیش از استفاده از آموزش‌ها و ابزارها، ماهیت ریسک معاملات و مسئولیت تصمیم‌های مالی را با دقت مطالعه کنید.", icon: ShieldAlert },
  terms: { eyebrow: "قواعد استفاده", title: "شرایط استفاده از خدمات", description: "چارچوب استفاده از محتوا، خدمات آموزشی، مشاوره و ابزارهای مرکز معاملات آل عصفور.", icon: Scale },
  privacy: { eyebrow: "حریم خصوصی", title: "اطلاعات شما با احترام نگهداری می‌شود.", description: "در این صفحه توضیح می‌دهیم چه اطلاعاتی دریافت می‌شود و چگونه از آن‌ها استفاده خواهد شد.", icon: FileText },
} as const;

type Slug = keyof typeof pageMeta;

export function generateStaticParams() {
  return Object.keys(pageMeta).map((slug) => ({ slug }));
}

export async function generateMetadata({ params }: { params: Promise<{ slug: string }> }): Promise<Metadata> {
  const { slug } = await params;
  if (!(slug in pageMeta)) return {};
  const meta = pageMeta[slug as Slug];
  return {
    title: `${meta.eyebrow} | مرکز معاملات آل عصفور`,
    description: meta.description,
    alternates: { canonical: `/${slug}` },
    openGraph: { title: meta.title, description: meta.description, type: "website", locale: "fa_IR" },
  };
}

function Courses({ items }: { items: CmsItem[] }) {
  const programs = [
    { title: "آموزش جامع فارکس", badge: "از پایه تا ساخت پلن", icon: ChartNoAxesCombined, description: "برای افرادی که می‌خواهند مفاهیم بازار، تحلیل، مدیریت سرمایه و اجرای منظم را در یک مسیر پیوسته یاد بگیرند.", items: ["مبانی و سازوکار بازار", "تحلیل و طراحی سناریو", "مدیریت سرمایه و ریسک", "تمرین و رفع اشکال"] },
    { title: "معامله‌گری طلا و سکه", badge: "بازار تخصصی", icon: BrainCircuit, description: "مسیر آموزشی متمرکز بر شناخت عوامل مؤثر، رفتار قیمت و چارچوب تصمیم‌گیری در بازار طلا و سکه.", items: ["شناخت ساختار بازار", "عوامل داخلی و جهانی", "سناریونویسی معاملاتی", "کنترل ریسک و هیجان"] },
  ];
  if (items.length) return <section className="page-section"><div className="grid gap-5 lg:grid-cols-2">{items.map((item) => <article className="content-card" key={item.id}>{item.imageUrl && <img src={item.imageUrl} alt={item.title} className="mb-6 aspect-[16/8] w-full rounded-2xl object-cover" />}<div className="flex items-center justify-between"><div className="path-icon !mb-0"><GraduationCap /></div>{item.subtitle && <span className="status-badge">{item.subtitle}</span>}</div><h2 className="mt-8 text-2xl font-black">{item.title}</h2><p className="mt-4 whitespace-pre-line leading-8 text-[#597067]">{item.summary}</p><Button asChild variant="outline" className="mt-8 h-11 rounded-full border-emerald-900/20"><Link href={`/read/${item.slug}`}>مشاهده جزئیات <ArrowLeft /></Link></Button></article>)}</div></section>;
  return <section className="page-section"><div className="grid gap-5 lg:grid-cols-2">{programs.map(({ title, badge, icon: Icon, description, items }) => <article className="content-card" key={title}><div className="flex items-center justify-between"><div className="path-icon !mb-0"><Icon /></div><span className="status-badge">{badge}</span></div><h2 className="mt-8 text-2xl font-black">{title}</h2><p className="mt-4 leading-8 text-[#597067]">{description}</p><ul className="feature-list">{items.map(item => <li key={item}><CircleCheck />{item}</li>)}</ul><Button asChild variant="outline" className="mt-8 h-11 rounded-full border-emerald-900/20"><Link href="/contact">دریافت برنامه و مشاوره <ArrowLeft /></Link></Button></article>)}</div><p className="mt-8 rounded-2xl border border-amber-800/10 bg-amber-50 p-5 text-sm leading-7 text-amber-900">دوره‌های جدید پس از انتشار از پنل مدیریت در همین بخش نمایش داده می‌شوند.</p></section>;
}

function Coaching() {
  const steps = [["۱", "شناخت وضعیت فعلی", "بررسی هدف، تجربه، پلن و مسئله اصلی معامله‌گر"], ["۲", "مشاهده الگوها", "تحلیل ژورنال و شناسایی خطاهای تصمیم‌گیری و اجرا"], ["۳", "برنامه اصلاح", "تعریف تمرین‌ها و معیارهای قابل‌اندازه‌گیری"], ["۴", "پیگیری و بازخورد", "بررسی اجرا و اصلاح قدم‌به‌قدم فرآیند"]];
  return <section className="page-section"><div className="grid gap-5 md:grid-cols-2">{steps.map(([number, title, text]) => <article className="content-card" key={number}><span className="text-5xl font-black text-[#d9b253]">{number}</span><h2 className="mt-5 text-xl font-black">{title}</h2><p className="mt-3 leading-8 text-[#597067]">{text}</p></article>)}</div><div className="mt-10 rounded-[2rem] bg-[#092f22] p-8 text-white sm:p-10"><h2 className="text-2xl font-black">جلسه آشنایی و ارزیابی</h2><p className="mt-4 max-w-2xl leading-8 text-emerald-50/65">پیش از شروع کوچینگ، یک جلسه برای شناخت شرایط و تناسب این مسیر با نیاز شما برگزار می‌شود.</p><Button asChild className="mt-6 rounded-full bg-[#d9b253] text-[#173c2d] hover:bg-[#e2bd65]"><a href={siteContent.contact.bookingHref} target="_blank" rel="noreferrer"><CalendarDays /> رزرو جلسه</a></Button></div></section>;
}

function Tools({ items }: { items: CmsItem[] }) {
  const tools = [["اکسپرت مدیریت سرمایه", "کمک به محاسبه حجم، حد ریسک و اجرای منظم‌تر معاملات", "نسخه فعلی"], ["محاسبه‌گر حجم معامله", "محاسبه حجم بر اساس موجودی، درصد ریسک و فاصله حد ضرر", "در برنامه توسعه"], ["ژورنال معاملاتی", "ثبت تصمیم‌ها، نتایج و الگوهای رفتاری برای تحلیل عملکرد", "فاز پنل دانش‌پذیر"]];
  if (items.length) return <section className="page-section"><div className="grid gap-5 lg:grid-cols-3">{items.map((item, index) => <article className="content-card" key={item.id}>{item.imageUrl && <img src={item.imageUrl} alt={item.title} className="mb-6 aspect-[16/9] w-full rounded-2xl object-cover" />}<div className={`path-icon !mb-0 ${index ? "!bg-[#d9b253] !text-[#173c2d]" : ""}`}><Wrench /></div>{item.subtitle && <span className="status-badge mt-6 inline-flex">{item.subtitle}</span>}<h2 className="mt-5 text-xl font-black">{item.title}</h2><p className="mt-3 leading-8 text-[#597067]">{item.summary}</p><Button asChild variant="outline" className="mt-7 rounded-full"><Link href={`/read/${item.slug}`}>مشاهده جزئیات <ArrowLeft /></Link></Button></article>)}</div></section>;
  return <section className="page-section"><div className="grid gap-5 lg:grid-cols-3">{tools.map(([title, text, state], index) => <article className="content-card" key={title}><div className={`path-icon !mb-0 ${index ? "!bg-[#d9b253] !text-[#173c2d]" : ""}`}><Wrench /></div><span className="status-badge mt-6 inline-flex">{state}</span><h2 className="mt-5 text-xl font-black">{title}</h2><p className="mt-3 leading-8 text-[#597067]">{text}</p></article>)}</div></section>;
}

function Knowledge({ items }: { items: CmsItem[] }) {
  const articles = [["روان‌شناسی", "مثل آب باش دوست من", "درک زمان مناسب حضور در بازار و سازگاری با شرایط نوسانی"], ["آموزش", "۹ استراتژی تأثیرگذار در معاملات فارکس", "نگاهی مقایسه‌ای به مزایا و محدودیت‌های رویکردهای معاملاتی"], ["اقتصاد", "شاخص مدیران خرید بخش خدمات چیست؟", "شناخت یک شاخص مهم برای ارزیابی وضعیت فعالیت‌های اقتصادی"]];
  if (items.length) return <section className="page-section"><div className="grid gap-5 lg:grid-cols-3">{items.map((item) => <article className="content-card" key={item.id}>{item.imageUrl && <img src={item.imageUrl} alt={item.title} className="mb-6 aspect-[16/9] w-full rounded-2xl object-cover" />}<span className="status-badge">{item.subtitle || "دانشنامه"}</span><h2 className="mt-6 text-xl font-black leading-8">{item.title}</h2><p className="mt-4 leading-8 text-[#597067]">{item.summary}</p><Link href={`/read/${item.slug}`} className="mt-8 inline-flex items-center gap-2 text-sm font-black text-[#0a5a3c]">مطالعه مطلب <ArrowLeft className="size-4" /></Link></article>)}</div></section>;
  return <section className="page-section"><div className="grid gap-5 lg:grid-cols-3">{articles.map(([category, title, excerpt]) => <article className="content-card" key={title}><span className="status-badge">{category}</span><h2 className="mt-6 text-xl font-black leading-8">{title}</h2><p className="mt-4 leading-8 text-[#597067]">{excerpt}</p></article>)}</div></section>;
}

function About({ founder, team }: { founder: typeof siteContent.founder; team: CmsItem[] }) {
  const people = team.length ? team : [{ id: 0, title: founder.name, subtitle: founder.role, summary: "" }];
  const pillars = [
    ["آموزش علمی", "تبدیل مفاهیم بازار به دانشی روشن و قابل‌اجرا"],
    ["تحلیل کاربردی", "ساخت سناریو و تصمیم‌گیری بر پایه شواهد"],
    ["مدیریت ریسک", "حفظ سرمایه و سنجش‌پذیرکردن عملکرد"],
    ["پشتیبانی مستمر", "تمرین، بازخورد و اصلاح قدم‌به‌قدم مسیر"],
  ];
  return <section className="page-section"><div className="grid gap-8 lg:grid-cols-[1.15fr_.85fr] lg:items-start"><div className="grid gap-5"><article className="content-card"><p className="eyebrow">نگاه ما</p><h2 className="mt-4 text-3xl font-black leading-[1.5]">بیش از ۸ سال تجربه؛ با تمرکز بر یک فرآیند قابل‌تکرار.</h2><p className="mt-5 leading-9 text-[#597067]">در مرکز معاملات آل عصفور، آموزش به انتقال چند تکنیک محدود نمی‌شود. هدف این است که معامله‌گر بتواند بازار را بفهمد، برای تصمیم خود منطق داشته باشد، ریسک را کنترل کند و عملکردش را صادقانه بررسی کند.</p></article><div className="grid gap-4 sm:grid-cols-2">{pillars.map(([title, text]) => <article className="content-card !p-6" key={title}><CircleCheck className="size-6 text-[#b88725]" /><h3 className="mt-4 font-black">{title}</h3><p className="mt-2 leading-7 text-[#597067]">{text}</p></article>)}</div></div><div className="grid gap-4">{people.map((person) => <article key={person.id} className="overflow-hidden rounded-[2rem] bg-[#092f22] p-8 text-white sm:p-10"><div className="flex size-20 items-center justify-center rounded-3xl bg-[#d9b253] text-[#173c2d]"><UserRound className="size-10" /></div><h2 className="mt-7 text-2xl font-black">{person.title}</h2><p className="mt-2 text-[#e0b651]">{person.subtitle}</p>{person.summary && <p className="mt-6 whitespace-pre-line leading-8 text-emerald-50/65">{person.summary}</p>}</article>)}</div></div></section>;
}

function Contact({ contact, faqs }: { contact: typeof siteContent.contact; faqs: CmsItem[] }) {
  return <section className="page-section"><div className="grid gap-8 lg:grid-cols-[.78fr_1.22fr]"><div className="grid gap-4 self-start"><a className="contact-info-card" href={contact.whatsappHref} target="_blank" rel="noreferrer"><MessageCircle /><span><strong>واتساپ</strong><small>گفت‌وگوی مستقیم با مرکز</small></span></a><a className="contact-info-card" href={contact.bookingHref} target="_blank" rel="noreferrer"><CalendarDays /><span><strong>رزرو مشاوره</strong><small>انتخاب زمان از سامانه فعلی</small></span></a><a className="contact-info-card" href={contact.phoneHref}><Phone /><span><strong>{contact.phoneDisplay}</strong><small>تماس تلفنی</small></span></a><a className="contact-info-card" href={contact.emailHref}><Mail /><span><strong>{contact.email}</strong><small>پست الکترونیک</small></span></a><a className="contact-info-card" href={contact.instagramHref} target="_blank" rel="noreferrer"><Camera /><span><strong>{contact.instagram}</strong><small>اینستاگرام رسمی</small></span></a></div><ConsultationForm /></div>{faqs.length > 0 && <div className="mt-12"><h2 className="section-title !text-3xl">پرسش‌های متداول</h2><div className="mt-6 grid gap-4">{faqs.map((faq) => <article key={faq.id} className="content-card"><h3 className="font-black">{faq.title}</h3><p className="mt-3 whitespace-pre-line leading-8 text-[#597067]">{faq.body || faq.summary}</p></article>)}</div></div>}</section>;
}

function Legal({ slug }: { slug: Slug }) {
  const copy = {
    risk: ["فعالیت در بازارهای مالی با احتمال از دست‌دادن بخشی یا تمام سرمایه همراه است.", "محتوای آموزشی، تحلیل‌ها و ابزارهای این وب‌سایت توصیه شخصی برای خرید یا فروش دارایی نیستند.", "مسئولیت ارزیابی شرایط مالی، انتخاب حجم معامله و تصمیم نهایی بر عهده کاربر است.", "عملکرد گذشته هیچ فرد، روش یا ابزار، تضمینی برای نتایج آینده ایجاد نمی‌کند."],
    terms: ["محتوای سایت برای استفاده آموزشی و شخصی ارائه می‌شود.", "بازنشر تجاری محتوا، دوره‌ها و فایل‌ها بدون اجازه کتبی مجاز نیست.", "جزئیات هر خدمت، مدت پشتیبانی و شرایط استفاده هنگام ثبت‌نام به‌صورت شفاف اعلام خواهد شد.", "نسخه نهایی شرایط استفاده پیش از راه‌اندازی فروش آنلاین تکمیل می‌شود."],
    privacy: ["در نسخه فعلی، اطلاعات تماس فقط برای پاسخ‌گویی به درخواست مشاوره دریافت می‌شود.", "اطلاعات کاربران بدون مبنای قانونی یا رضایت آن‌ها در اختیار اشخاص نامرتبط قرار نمی‌گیرد.", "با راه‌اندازی پنل مدیریت، سطح دسترسی، مدت نگهداری و روش حذف اطلاعات دقیق‌تر اعلام می‌شود.", "نشانی فیزیکی مجموعه در حال حاضر در وب‌سایت منتشر نمی‌شود."],
  }[slug as "risk" | "terms" | "privacy"];
  return <section className="page-section"><article className="mx-auto max-w-3xl rounded-[2rem] border border-emerald-950/10 bg-white p-7 sm:p-10"><ul className="grid gap-5">{copy.map(item => <li className="flex gap-3 leading-8 text-[#4d675d]" key={item}><CircleCheck className="mt-2 size-5 shrink-0 text-[#b88725]" />{item}</li>)}</ul></article></section>;
}

export default async function GeneralPage({ params }: { params: Promise<{ slug: string }> }) {
  const { slug } = await params;
  if (!(slug in pageMeta)) notFound();
  const typedSlug = slug as Slug;
  const meta = pageMeta[typedSlug];
  const itemType = typedSlug === "courses" ? "course" : typedSlug === "knowledge" ? "article" : typedSlug === "tools" ? "tool" : typedSlug === "about" ? "team" : typedSlug === "contact" ? "faq" : "";
  const [settings, items] = await Promise.all([safeSettings(), itemType ? safePublishedItems(itemType) : Promise.resolve([])]);
  const resolved = resolveSiteContent(settings);
  let content;
  if (typedSlug === "courses") content = <Courses items={items} />;
  else if (typedSlug === "coaching") content = <Coaching />;
  else if (typedSlug === "tools") content = <Tools items={items} />;
  else if (typedSlug === "knowledge") content = <Knowledge items={items} />;
  else if (typedSlug === "about") content = <About founder={resolved.founder} team={items} />;
  else if (typedSlug === "contact") content = <Contact contact={resolved.contact} faqs={items} />;
  else content = <Legal slug={typedSlug} />;

  return <main className="min-h-screen bg-[#f7f8f5]"><SiteHeader content={resolved} /><PageHero {...meta} />{content}<SiteFooter content={resolved} /></main>;
}
