import { NextRequest, NextResponse } from 'next/server';
import { getSession } from '@/lib/auth';
import { db, schema } from '@/lib/db';
import { eq, and } from 'drizzle-orm';

function getAuthHeader(token: string): string {
  return token.includes(':')
    ? `Basic ${Buffer.from(token).toString('base64')}`
    : `Bearer ${token}`;
}

export async function GET(request: NextRequest) {
  const session = await getSession(request.cookies.get('scriba.access_token')?.value);
  if (!session) return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });

  const account = await db.query.accounts.findFirst({
    where: and(eq(schema.accounts.userId, session.user.id), eq(schema.accounts.providerId, 'bitbucket')),
  });

  if (!account?.accessToken) return NextResponse.json({ connected: false, workspaces: [] });

  const res = await fetch(
    'https://api.bitbucket.org/2.0/workspaces?role=member&pagelen=50',
    { headers: { Authorization: getAuthHeader(account.accessToken) } }
  );

  if (!res.ok) return NextResponse.json({ connected: true, workspaces: [] });

  const data = await res.json();
  const workspaces = (data.values ?? []).map((w: any) => ({
    slug: w.slug,
    name: w.name,
    avatarUrl: w.links?.avatar?.href ?? null,
  }));

  return NextResponse.json({ connected: true, workspaces });
}
