import { fetchBaserowRows } from "../lib/baserow";

export interface PortfolioItem {
  id: string;
  title: string;
  description: string;
  category: string;
  image: string;
  tags: string[];
  featured: boolean;
}

export const PORTFOLIO_ITEMS: PortfolioItem[] = [
  {
    id: "fintech-rebrand",
    title: "Global Wealth Fintech Rebrand",
    description: "Elevasi identitas visual dan strategi digital untuk firma manajemen kekayaan terkemuka, menyasar segmen ultra-high-net-worth.",
    category: "Creative & Strategy",
    image: "https://lh3.googleusercontent.com/aida-public/AB6AXuCgHTeMd3kJ4SJ-j-UMfTNKQMGf2wfHl74SGyEj9a2ycMNl4GMxvaZu2m6-57jKCvDZ85mfef0D4HoXBZ8AOoDAjBbFCFBXJVDkrc25xJ2uH6CCYmfG9sEymyvqQoQeGXK0HabmIOKX1GepNNQ7qWp5dThH4fkx4bLVlHk7qzu_fdhVmdQwqYJjUP96f8-7wOrm_P1ee4S9pxcoah2x3CbmpxGfk8XiGwEE7Fb5GthY_K-pZNrhMv6nhH79fI4s8j7B0LUplraPNpo",
    tags: ["Creative", "Strategy"],
    featured: true,
  },
  {
    id: "ecommerce-scaleup",
    title: "E-commerce Giant Scale-up",
    description: "Arsitektur infrastruktur server global dan optimalisasi rantai pasok digital untuk menangani 10x volume transaksi harian.",
    category: "IT & Business",
    image: "https://lh3.googleusercontent.com/aida-public/AB6AXuBQa1h_Ry1HHBoOLwdnCLmAWmeYUSyPfkoWq1vkXwn1Bu9rp2-6U0itZbCCY-On6Q6QnG3knPTfIqlv0hYHMf4XfEdrfMMmmmU8Em1U0tFX1pDMpEr9NnWA0H7WGrBPHIwhQreXwNxrlZeFGaRjMZ22n8kq1i9eV9o0bwmqLQ9-W2oNYdvjwK-jrs7k0w9qWsnmWbl4Na3mHl10s_9v1IRav3D3kkErUTj12g8h3jJWaaOMtehHRVMDx67eomEBjV1ozTtM336h_sU",
    tags: ["IT", "Business"],
    featured: true,
  },
  {
    id: "ai-workflow",
    title: "AI Workflow Optimization",
    description: "Implementasi model AI kustom untuk mengotomatisasi proses operasional kompleks, meningkatkan efisiensi hingga 40%.",
    category: "IT System",
    image: "https://lh3.googleusercontent.com/aida-public/AB6AXuBspPvH7wt1zbGsqDFGsXcW_Wv69y9XgAN-euGlZCZd8PEjYniu_Nc0wbBjpLXYZtpz6hJ3Urm2_WK4wTVeZU6mKGoZOIGDOUZBcaFIrV-1dRc2YSuII8gY3katmO6Z9r2oZF4kRBSodsjDje_dBJ1a-TMZGwcBrIVEUfG06n0k36gUg9lz2nB3wkp99Xya4ZFxC7Uqjv7DWlDMfEwYS_ZY9OSYJHLuX36qWZsmgqKNOpST6Qjf-iQmK5wG_0Ll4WsPGLc0OayKrTw",
    tags: ["IT"],
    featured: true,
  },
  {
    id: "brand-repositioning",
    title: "Manufacturing Brand Repositioning",
    description: "Transformasi budaya perusahaan dan narasi brand untuk menarik talenta generasi Z di industri manufaktur tradisional.",
    category: "Creative & HR",
    image: "https://lh3.googleusercontent.com/aida-public/AB6AXuBfKWOuPiN5t8il7Aub_bYFR02W72HVLumm-FGhCQ9d4EmnN0v6hrjpKkjRs7UsFAUknfUTM4sWlKP9BjAJ30izTg9avbD71jHwttFzAwPWY33UeYQqGsYNgt2vCPO3i1VjiGqBJCtDBQ7snpgxeOSbfE-DYyOCj5vrMw2swwuJxEctYOY1C0rzeOBLb202JYhXCQiym-D-QMOXR45_fe5Pktp4myBS2vCzwgI-sb98Pe-pObn7eGLD2eJzK7f4fbuHTpTNRyJfKsY",
    tags: ["Creative", "HR"],
    featured: true,
  },
];

export const PORTFOLIO_CATEGORIES = [
  "Semua",
  "Business",
  "Creative",
  "Production",
  "IT",
  "Digital System",
];

export interface BaserowPortfolioRow {
  id: number;
  Name?: string;
  Title?: string;
  Description?: string;
  "Short Description"?: string;
  Category?: string | { value: string };
  "URL Image"?: string | { url: string }[];
  Tags?: string | { value: string }[] | string[];
  "Multiple select"?: { value: string }[];
  Active?: boolean;
  Featured?: boolean;
  Slug?: string;
  Order?: string | number;
  [key: string]: unknown;
}

function slugify(text: string): string {
  return text
    .toLowerCase()
    .replace(/[^a-z0-9]+/g, "-")
    .replace(/(^-|-$)/g, "");
}

export async function fetchPortfolioItems(): Promise<PortfolioItem[]> {
  try {
    const tableId = import.meta.env.BASEROW_PORTFOLIO_TABLE_ID;
    if (!tableId) {
      console.warn("BASEROW_PORTFOLIO_TABLE_ID is not defined. Falling back to static portfolio items.");
      return PORTFOLIO_ITEMS;
    }

    const rows = await fetchBaserowRows<BaserowPortfolioRow>(tableId);
    if (!rows || rows.length === 0) {
      return PORTFOLIO_ITEMS;
    }

    const activeRows = rows.filter(row => row.Active !== false);

    // Sort by Order if present
    activeRows.sort((a, b) => {
      const valA = a.Order !== undefined && a.Order !== null && a.Order !== "" ? Number(a.Order) : 999999;
      const valB = b.Order !== undefined && b.Order !== null && b.Order !== "" ? Number(b.Order) : 999999;
      return (isNaN(valA) ? 999999 : valA) - (isNaN(valB) ? 999999 : valB);
    });

    const mappedItems: PortfolioItem[] = activeRows.map(row => {
      const id = row.Slug || (row.id !== undefined && row.id !== null ? String(row.id) : "") || slugify(row.Name || row.Title || "");
      const title = row.Name || row.Title || "";
      const description = row["Short Description"] || row.Description || "";

      let tags: string[] = [];
      if (row["Multiple select"] && Array.isArray(row["Multiple select"])) {
        tags = row["Multiple select"].map(item => item.value).filter(Boolean);
      } else if (row.Tags) {
        if (typeof row.Tags === "string") {
          tags = row.Tags.split(",").map(t => t.trim()).filter(Boolean);
        } else if (Array.isArray(row.Tags)) {
          tags = row.Tags.map(t => {
            if (typeof t === "string") {
              return t.trim();
            } else if (t && typeof t === "object" && "value" in t && typeof t.value === "string") {
              return t.value.trim();
            }
            return "";
          }).filter(Boolean);
        }
      }

      let category = "Uncategorized";
      if (row.Category) {
        if (typeof row.Category === "string") {
          category = row.Category;
        } else if (typeof row.Category === "object" && "value" in row.Category && typeof row.Category.value === "string") {
          category = row.Category.value;
        }
      } else if (tags.length > 0) {
        category = tags.join(" & ");
      }

      let image = "";
      if (row["URL Image"]) {
        if (typeof row["URL Image"] === "string") {
          image = row["URL Image"];
        } else if (Array.isArray(row["URL Image"]) && row["URL Image"].length > 0) {
          const first = row["URL Image"][0];
          if (first && typeof first === "object" && "url" in first && typeof first.url === "string") {
            image = first.url;
          }
        }
      }

      return {
        id,
        title,
        description,
        category,
        image,
        tags,
        featured: row.Featured === true,
      };
    });

    if (mappedItems.length === 0) {
      return PORTFOLIO_ITEMS;
    }

    return mappedItems;
  } catch (error) {
    console.error("Error fetching portfolio items from Baserow:", error);
    return PORTFOLIO_ITEMS;
  }
}

