import express, { type Request, type Response, type Router } from 'express' import { asyncHandler } from '../../utils/asyncHandler.js' import { successResponse } from '../../utils/response.js' import { RemoteService, type DeviceData } from './service.js' export interface RemoteRoutesDependencies { remoteService: RemoteService } export const createRemoteRoutes = (deps: RemoteRoutesDependencies): Router => { const router = express.Router() const { remoteService } = deps router.get( '/config', asyncHandler(async (req: Request, res: Response) => { const config = await remoteService.getConfig() successResponse(res, config) }), ) router.post( '/config', asyncHandler(async (req: Request, res: Response) => { const config = req.body await remoteService.saveConfig(config) successResponse(res, null) }), ) router.get( '/screenshot', asyncHandler(async (req: Request, res: Response) => { const deviceName = req.query.device as string | undefined const buffer = await remoteService.getScreenshot(deviceName) if (!buffer) { return successResponse(res, '') } const base64 = `data:image/png;base64,${buffer.toString('base64')}` successResponse(res, base64) }), ) router.post( '/screenshot', asyncHandler(async (req: Request, res: Response) => { const { dataUrl, deviceName } = req.body console.log('[Remote] saveScreenshot called:', { deviceName, hasDataUrl: !!dataUrl }) await remoteService.saveScreenshot(dataUrl, deviceName) successResponse(res, null) }), ) router.get( '/data', asyncHandler(async (req: Request, res: Response) => { const deviceName = req.query.device as string | undefined const data = await remoteService.getData(deviceName) successResponse(res, data) }), ) router.post( '/data', asyncHandler(async (req: Request, res: Response) => { const { deviceName, lastConnected } = req.body const data: DeviceData = {} if (lastConnected !== undefined) { data.lastConnected = lastConnected } await remoteService.saveData(data, deviceName) successResponse(res, null) }), ) return router } const remoteService = new RemoteService() export default createRemoteRoutes({ remoteService })