import { type NextRequest, NextResponse } from 'next/server';

import { getCreatorData } from '@/services/creators';

type SerializableMembership = {
  nev: string;
  tol: number;
  ig: number | null;
};

const toNullableString = (value: unknown): string | null => {
  if (typeof value !== 'string') return null;
  const trimmed = value.trim();
  return trimmed.length > 0 ? trimmed : null;
};

const normalizeMemberships = (memberships: unknown): SerializableMembership[] | null => {
  if (!Array.isArray(memberships)) return null;

  const normalized = memberships
    .map((membership) => {
      if (!membership || typeof membership !== 'object') return null;

      const membershipObject = membership as Record<string, unknown>;
      const nev = toNullableString(membershipObject.nev);
      const tolRaw = membershipObject.tol;
      const igRaw = membershipObject.ig;

      if (typeof tolRaw !== 'number' || !Number.isFinite(tolRaw) || !nev) {
        return null;
      }

      const ig = typeof igRaw === 'number' && Number.isFinite(igRaw) ? igRaw : null;

      return {
        nev,
        tol: tolRaw,
        ig,
      };
    })
    .filter((membership): membership is SerializableMembership => Boolean(membership));

  return normalized.length > 0 ? normalized : null;
};

export async function GET(request: NextRequest) {
  try {
    const id = request.nextUrl.searchParams.get('id')?.trim();

    if (!id) {
      return NextResponse.json({ success: false, error: 'Missing creator id' }, { status: 400 });
    }

    const creator = await getCreatorData(id);

    if (!creator) {
      return NextResponse.json({ success: false, error: 'Creator not found' }, { status: 404 });
    }

    return NextResponse.json({
      success: true,
      data: {
        alkotoAzonosito: toNullableString(creator.alkotoAzonosito) ?? id,
        nev: toNullableString(creator.nev),
        profilkepKey: toNullableString(creator.profilkep?.key),
        szakma: toNullableString(creator.szakma),
        szakmaOndef: toNullableString(creator.szakmaOndef),
        szuletesiHely: toNullableString(creator.szuletesiHely),
        szuletesiIdo: toNullableString(creator.szuletesiIdo),
        elhalalozasHelye: toNullableString(creator.elhalalozasHelye),
        elhalalozasIdeje: toNullableString(creator.elhalalozasIdeje),
        tagozat: toNullableString(creator.tagozat),
        mmaTagsagLista: normalizeMemberships(creator.mmaTagsagLista),
      },
    });
  } catch (error) {
    console.error('Error fetching creator data:', error);
    return NextResponse.json(
      {
        success: false,
        error: 'Failed to fetch creator data',
        details: error instanceof Error ? error.message : String(error),
      },
      { status: 500 }
    );
  }
}
