package org.nstart.dep265.requestservice.dto

import java.util.UUID

/**
 * Краткая карточка ячейки сетки для GET /v1/cells.
 */
data class CellSummaryResponseDto(
    /** Номер ячейки сетки. */
    val cellNum: Long,

    /** Широта центра ячейки. */
    val latitude: Double,

    /** Долгота центра ячейки. */
    val longitude: Double,

    /** Расчетная важность ячейки. */
    val importance: Double,

    /** Контур ячейки в WKT. */
    val contour: String,
)

/**
 * Постраничный список ячеек сетки.
 */
data class CellsListResponseDto(
    /** Элементы текущей страницы. */
    val items: List<CellSummaryResponseDto>,

    /** Номер страницы, начиная с 0. */
    val page: Int,

    /** Размер страницы. */
    val size: Int,

    /** Общее количество элементов. */
    val totalItems: Long,

    /** Общее количество страниц. */
    val totalPages: Int,
)

/**
 * Фрагмент заявки внутри ячейки сетки для GET /v1/cells/priority-map.
 */
data class CellRequestFragmentResponseDto(
    /** Идентификатор заявки. */
    val requestId: UUID,

    /** Контур фрагмента заявки внутри ячейки в WKT. */
    val contour: String,

    /** Процент покрытия ячейки фрагментом заявки. */
    val coveragePercent: Double,

    /** Snapshot важности заявки из request_cells. */
    val importance: Double,
)

/**
 * Ячейка сетки с фрагментами заявок для GET /v1/cells/priority-map.
 */
data class CellWithRequestsResponseDto(
    /** Номер ячейки сетки. */
    val cellNum: Long,

    /** Широта центра ячейки. */
    val latitude: Double,

    /** Долгота центра ячейки. */
    val longitude: Double,

    /** Расчетная важность ячейки. */
    val importance: Double,

    /** Контур ячейки в WKT. */
    val contour: String,

    /** Фрагменты заявок, пересекающие ячейку. */
    val requests: List<CellRequestFragmentResponseDto>,
)

/**
 * Список ячеек сетки с фрагментами заявок для GET /v1/cells/priority-map.
 */
data class CellPriorityMapResponseDto(
    /** Ячейки сетки с привязанными request_cells fragments. */
    val items: List<CellWithRequestsResponseDto>,
)
