import Container from "@/components/elements/Container";
import ModelsFilter from "@/components/models/ModelsFilter";
import { cookies } from "next/headers";
import InfinitePosts from "@/components/models/InfinitePosts";
import StoriesBar from "@/components/stories/StoriesBar";
import Header from "@/components/main/Header";
import TabNavigation from "@/components/TabNavigation";
import { Metadata } from "next";
import { pageSeo } from "@/config/pageSeo";
import { generatePageMetadata } from "@/utils/generatePageMetadata";

// درون‌ریزی فایل‌های دیتا برای استخراج نام شهر و استان
import provinces from "@/data/provinces.json";
import cities from "@/data/cities.json";
import { normalizeUserLevel, parseUserLevelFromSlug } from "@/lib/userLevel";

interface IModelsProps {
  params: Promise<{ slug?: string[] }>;
  searchParams: Promise<{
    expertise?: string;
    province?: string;
    city?: string;
    userLevel?: string;
    rateFilter?: string;
    hashtag?: string; // این خط را اضافه کنید
  }>;
}

// تابع هوشمند تولید متادیتا
export async function generateMetadata({ params, searchParams }: IModelsProps): Promise<Metadata> {
  const [urlParams, filters] = await Promise.all([params, searchParams]);

  const isDefaultHome =
    (!urlParams.slug || urlParams.slug.length === 0) &&
    !filters.expertise &&
    !filters.province &&
    !filters.city &&
    !filters.userLevel &&
    !filters.rateFilter &&
    !filters.hashtag;

  if (isDefaultHome) {
    return generatePageMetadata({
      title: pageSeo.home.title,
      description: pageSeo.home.description,
      path: pageSeo.home.path,
      keywords: [...pageSeo.home.keywords],
    });
  }

  let locationLabel = "";
  let levelLabel = "";

  try {
    if (urlParams.slug && urlParams.slug.length > 0) {
      const decodedText = decodeURIComponent(urlParams.slug[0]).replace(/-/g, ' ');
      
      // اولویت با متن فارسی ساخته شده در URL
      if (decodedText.startsWith("استخدام")) {
        const title = `${decodedText} | مدستاگرام`;
        const description = `لیست برترین متخصصین مد و زیبایی: ${decodedText}. پیدا کردن مدل، عکاس و آرایشگر حرفه‌ای در مدستاگرام.`;
        return generatePageMetadata({
          title,
          description,
          path: `/${urlParams.slug.join("/")}`,
        });
      }
      
      const pSlug = decodeURIComponent(urlParams.slug[0]);
      const province = provinces.find((p) => p.slug === pSlug);
      if (province) {
        locationLabel = ` در استان ${province.name}`;
        if (urlParams.slug.length > 1) {
          const cSlug = decodeURIComponent(urlParams.slug[1]);
          const city = cities.find((c) => c.slug === cSlug);
          if (city) locationLabel = ` در ${city.name}`;
        }
      }
    } 
    
    if (!locationLabel) {
       if (filters.city) {
         const city = cities.find(c => c.id.toString() === filters.city);
         if (city) locationLabel = ` در شهر ${city.name}`;
       } else if (filters.province) {
         const province = provinces.find(p => p.id.toString() === filters.province);
         if (province) locationLabel = ` در استان ${province.name}`;
       }
    }
    if (filters.userLevel) levelLabel = ` سطح ${filters.userLevel}`;
  } catch (error) {
    console.error("Error generating metadata", error);
  }

  const expertiseLabel = filters.expertise || "مدل، عکاس و آرایشگر";
  const title = `استخدام ${expertiseLabel}${levelLabel}${locationLabel} | مدستاگرام`;
  const description = `پلتفرم تخصصی استخدام ${expertiseLabel}${locationLabel}. بهترین متخصصین حوزه زیبایی و مد را در مدستاگرام پیدا کنید.`;

  const path =
    urlParams.slug && urlParams.slug.length > 0
      ? `/${urlParams.slug.join("/")}`
      : pageSeo.home.path;

  return generatePageMetadata({ title, description, path });
}

export default async function Models({ params, searchParams }: IModelsProps) {
  const [urlParams, filters, cookieStore] = await Promise.all([
    params,
    searchParams,
    cookies()
  ]);
  
  const token = cookieStore.get("token")?.value || "";
  
  // ۱. مقادیر پایه (اولویت با کوئری پارامتر برای دقت در فیلتر)
  let provinceId = filters.province || "";
  let cityId = filters.city || "";
  let userLevel = normalizeUserLevel(filters.userLevel || "");
  let expertise = filters.expertise || "";

  // ۲. استخراج و همگام‌سازی اطلاعات از URL فارسی (Slug)
  if (urlParams.slug && urlParams.slug.length > 0) {
    const fullText = decodeURIComponent(urlParams.slug[0]).replace(/-/g, ' ');

    // استخراج تخصص (فقط اگر در متن موجود باشد)
    if (fullText.includes("مدل")) expertise = "مدل";
    else if (fullText.includes("عکاس")) expertise = "عکاس";
    else if (fullText.includes("آرایشگر")) expertise = "آرایشگر";
    else if (fullText.includes("متخصصین")) expertise = ""; // حالت بدون تخصص

    const parsedLevel = parseUserLevelFromSlug(fullText);
    if (parsedLevel) userLevel = parsedLevel;

    // استخراج مکان (IDها)
    if (fullText.includes("در شهر")) {
      const cityName = fullText.split("در شهر")[1]?.trim();
      const foundCity = cities.find(c => cityName.includes(c.name));
      if (foundCity) cityId = foundCity.id.toString();
    } else if (fullText.includes("در استان")) {
      const provinceName = fullText.split("در استان")[1]?.trim();
      const foundProvince = provinces.find(p => provinceName.includes(p.name));
      if (foundProvince) provinceId = foundProvince.id.toString();
    }

    // هندل کردن اسلاگ‌های انگلیسی (مثلاً برای سئو قدیمی یا دستی)
    if (!provinceId && !cityId) {
        const p = provinces.find(x => x.slug === urlParams.slug![0]);
        if (p) {
            provinceId = p.id.toString();
            if (urlParams.slug![1]) {
                const c = cities.find(x => x.slug === urlParams.slug![1]);
                if (c) cityId = c.id.toString();
            }
        }
    }
  }

  // آماده‌سازی لیبل‌ها برای نمایش در صفحه (H1)
  const displayExpertise = expertise || filters.expertise || "متخصصین مد و زیبایی";
  const levelText = userLevel ? ` سطح ${userLevel}` : "";

  return (
    <>
      <Header />
      <Container>
        {/* H1 مخفی برای بهبود سئو بر اساس آدرس صفحه */}
        <h1 className="sr-only">
          {(!urlParams.slug || urlParams.slug.length === 0) &&
          !filters.expertise &&
          !filters.province &&
          !filters.city &&
          !filters.userLevel
            ? pageSeo.home.title.replace(" | مدستاگرام", "")
            : `استخدام ${displayExpertise}${levelText} در مدستاگرام`}
        </h1>
        
        {/* کامپوننت فیلتر با مقدار تخصص فعلی */}
        <ModelsFilter expertise={expertise || filters.expertise || ""} />

        <StoriesBar />

        {/* نمایش پست‌ها با تمام فیلترهای استخراج شده */}
        <InfinitePosts 
          filters={{ 
            ...filters, 
            hashtag: filters.hashtag, // این خط را اضافه کن
            province: provinceId, 
            city: cityId, 
            userLevel: userLevel || normalizeUserLevel(filters.userLevel),
            expertise: expertise || filters.expertise
          }} 
          token={token} 
          // مقدار typeFilter را حذف کنید تا همه انواع نمایش داده شود
        />
      </Container>
      <TabNavigation currentPage="/" />
    </>
  );
}