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

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 });

  // Support both HTTP access tokens (Bearer) and app passwords (username:password)
  let authHeader: string;
  if (account.accessToken.includes(':')) {
    // App password format: username:app_password
    authHeader = `Basic ${Buffer.from(account.accessToken).toString('base64')}`;
  } else {
    // HTTP access token (Bearer)
    authHeader = `Bearer ${account.accessToken}`;
  }

  const res = await fetch('https://api.bitbucket.org/2.0/user', {
    headers: { Authorization: authHeader },
  });

  if (!res.ok) return NextResponse.json({ connected: false });

  const bbUser = await res.json();
  return NextResponse.json({
    connected: true,
    login: bbUser.username ?? bbUser.nickname,
    name: bbUser.display_name,
    avatar: bbUser.links?.avatar?.href ?? null,
    url: bbUser.links?.html?.href ?? null,
  });
}
