/* eslint-disable @typescript-eslint/no-explicit-any */
import { NextResponse } from 'next/server';

import { getCreationList } from '@/services/creations';

import { CreationListItem } from '@/types/Creation';

export async function GET(request: Request) {
  try {
    const { searchParams } = new URL(request.url);

    // Base body
    const body: any = {
      firstResult: 0,
      maxResults: 100000,
      personIdList: null,
      personIdentifierList: null,
      queryString: null,
      contentType: null,
      imageNeeded: false,
      conceptionIdList: [],
      videoType: null,
      featuredContent: false,
    };

    // Override defaults with query parameters if provided
    if (searchParams.has('firstResult')) {
      body.firstResult = parseInt(searchParams.get('firstResult')!);
    }
    if (searchParams.has('maxResults')) {
      body.maxResults = parseInt(searchParams.get('maxResults')!);
    }
    if (searchParams.has('queryString')) {
      body.queryString = searchParams.get('queryString');
    }
    // Handle contentType as array of strings
    if (searchParams.has('ct')) {
      const contentTypeParam = searchParams.get('ct');
      body.contentType = contentTypeParam ? contentTypeParam.split(',') : null;
    }
    if (searchParams.has('imageNeeded')) {
      body.imageNeeded = searchParams.get('imageNeeded') === 'true';
    }
    if (searchParams.has('conceptionIdList')) {
      body.conceptionIdList = JSON.parse(searchParams.get('conceptionIdList')!);
    }
    if (searchParams.has('personIdentifierList')) {
      body.personIdentifierList = JSON.parse(searchParams.get('personIdentifierList')!);
    }

    // Year filter (frontend-only filtering for now)
    const evParam = searchParams.get('ev');
    const ev = evParam ? Number(evParam) : undefined;

    const list = await getCreationList(body);

    // Filter by exact year (labelYear) if ev provided
    const filtered =
      typeof ev === 'number' ? list.filter((item) => Number(item.labelYear) === ev) : list;

    const transformedData = filtered.map((item: CreationListItem) => ({
      id: item.id,
      alkotasAzonosito: item.alkotasAzonosito,
      nev: item.nev || null,
      fokep: item.fokep || null,
      hivatkozas: item.hivatkozas || null,
      telepules: item.telepules || null,
      alkotoAzonosito: item.alkotoAzonosito,
      megjelenitendoNev: item.megjelenitendoNev,
      koordinatak: item.koordinatak || '',
      cardType: item.cardType || 'creation',
      fokepId: item.fokepId || null,
      fokepNev: item.fokepNev || null,
      label: item.label || null,
      labelYear: item.labelYear || null,
    }));

    return NextResponse.json({
      success: true,
      data: transformedData,
      totalCount: transformedData.length,
    });
  } catch (error) {
    console.error('Error fetching creation list:', error);
    return NextResponse.json(
      {
        success: false,
        error: 'Failed to fetch creation list',
        details: error instanceof Error ? error.message : String(error),
      },
      { status: 500 }
    );
  }
}
