import { NextRequest, NextResponse } from 'next/server';
import { fetchJson } from '@/lib/utils/server';

export async function GET(request: NextRequest)
{
	const { searchParams } = request.nextUrl;
	const code = searchParams.get('code');
	const error = searchParams.get('error');

	if (error || !code) {
		return NextResponse.redirect(new URL('/studio/settings?error=cancelled', request.url));
	}

	// 클라이언트(handleConnect)에서 인증 URL 생성 시 사용한 redirect_uri 와 정확히 동일해야 Google 이 토큰 교환을 승인.
	// IIS 역방향 프록시 뒤에서 request.nextUrl.origin 이 다르게 평가되는 문제 회피.
	const siteUrl = process.env.NEXT_PUBLIC_SITE_URL || request.nextUrl.origin;
	const redirectUri = `${siteUrl}/api/auth/youtube/callback`;

	const res = await fetchJson('/api/studio/youtube-connect', {
		method: 'POST',
		body: JSON.stringify({ code, redirectUri }),
		headers: { 'Content-Type': 'application/json' }
	});

	if (!res.success) {
		const msg = encodeURIComponent(res.message ?? '연결 실패');
		return NextResponse.redirect(new URL(`/studio/settings?error=${msg}`, request.url));
	}

	return NextResponse.redirect(new URL('/studio/settings?connected=true', request.url));
}