package com.pixelized.server.lwa.server.rest.map

import com.pixelized.server.lwa.server.Engine
import com.pixelized.server.lwa.utils.extentions.create
import com.pixelized.server.lwa.utils.extentions.exception
import com.pixelized.shared.lwa.model.alteration.AlterationJson
import com.pixelized.shared.lwa.model.map.MapJson
import com.pixelized.shared.lwa.protocol.rest.APIResponse
import com.pixelized.shared.lwa.protocol.websocket.ApiSynchronisation
import io.ktor.server.request.receive
import io.ktor.server.response.respond
import io.ktor.server.routing.RoutingContext

fun Engine.putMap(): suspend RoutingContext.() -> Unit {
    return {
        try {
            val form = call.receive<MapJson>()
            val create = call.queryParameters.create

            mapService.save(
                json = form,
                create = create,
            )
            call.respond(
                message = APIResponse.success(),
            )
            webSocket.emit(
                value = ApiSynchronisation.MapUpdate(
                    timestamp = System.currentTimeMillis(),
                    id = form.id,
                ),
            )
        } catch (exception: Exception) {
            call.exception(
                exception = exception,
            )
        }
    }
}