import { json, type LoaderFunctionArgs } from '@remix-run/node';
import { difyClient } from '~/api/dify-chat/client.server';
import { commitSession, getSessionInfo } from '../utils/session.server';

export async function loader({ request }: LoaderFunctionArgs) {
    try {
        // 获取用户会话信息和 JWT
        const { getUserSession } = await import("~/api/login/auth.server");
        const { frontendJWT } = await getUserSession(request);
        const { session } = await getSessionInfo(request);

        // 检查 JWT 是否存在
        if (!frontendJWT) {
            console.error('❌ [API] Conversations API - JWT不存在');
            return json(
                { data: [], error: 'JWT认证失败，请重新登录' },
                {
                    status: 401,
                    headers: {
                        'Set-Cookie': await commitSession(session),
                    },
                }
            );
        }

        // 从 URL 参数获取 app_id
        const url = new URL(request.url);
        const appId = url.searchParams.get('app_id') || undefined;

        console.log('[API] Conversations - 获取会话列表:', { appId });

        const data = await difyClient.getConversations(frontendJWT, appId);

        return json(data, {
            headers: {
                'Set-Cookie': await commitSession(session),
            },
        });
    } catch (error: any) {
        console.error('❌ [API] Conversations API - Error:', error);

        // 从错误中提取原始 HTTP 状态码
        const statusMatch = error.message?.match(/(\d{3})/);
        const originalStatus = statusMatch ? parseInt(statusMatch[1]) : 0;
        const status = error.message?.includes('JWT认证失败') ? 401
            : originalStatus >= 400 && originalStatus < 500 ? originalStatus
            : 500;

        return json(
            {
                data: [],
                error: error.message || 'Failed to fetch conversations'
            },
            {
                status,
                headers: {
                    'Set-Cookie': await commitSession((await getSessionInfo(request)).session),
                },
            }
        );
    }
} 