import { NextRequest, NextResponse } from 'next/server';
import { validateOpenClawKey } from '@/lib/utils/openclaw-auth';
import { DattoRMMSyncService } from '@/lib/services/datto-rmm-sync-service';

let syncServiceInstance: DattoRMMSyncService | null = null;
function getSyncService(): DattoRMMSyncService {
  if (!syncServiceInstance) syncServiceInstance = new DattoRMMSyncService();
  return syncServiceInstance;
}

export async function POST(request: NextRequest) {
  const authError = validateOpenClawKey(request);
  if (authError) return authError;

  try {
    const syncService = getSyncService();

    if (syncService.isSyncInProgress()) {
      return NextResponse.json({ error: 'A Datto RMM sync is already in progress' }, { status: 409 });
    }

    const body = await request.json().catch(() => ({}));
    const syncType = body.syncType === 'full' ? 'full' : 'incremental';

    (syncType === 'full'
      ? syncService.fullSync('openclaw')
      : syncService.incrementalSync('openclaw')
    ).catch((err) => console.error('[OpenClaw] Datto RMM sync failed:', err));

    return NextResponse.json({
      message: `Datto RMM ${syncType} sync started`,
      syncType,
      triggeredBy: 'openclaw',
    });
  } catch (error) {
    const msg = error instanceof Error ? error.message : String(error);
    return NextResponse.json({ error: msg }, { status: 500 });
  }
}
