package roomescape.reservation.web import roomescape.payment.infrastructure.client.v2.PaymentConfirmRequest import roomescape.payment.infrastructure.common.PaymentStatus import roomescape.payment.infrastructure.common.PaymentType import roomescape.reservation.infrastructure.persistence.ReservationEntity import roomescape.reservation.infrastructure.persistence.ReservationStatus import java.time.LocalDate import java.time.LocalDateTime import java.time.LocalTime data class ReservationCreateRequest( val date: LocalDate, val timeId: Long, val themeId: Long, ) data class ReservationCreateResponseV2( val reservationId: Long, val memberEmail: String, val date: LocalDate, val startAt: LocalTime, val themeName: String ) fun ReservationEntity.toCreateResponseV2() = ReservationCreateResponseV2( reservationId = this.id!!, memberEmail = this.member.email, date = this.date, startAt = this.time.startAt, themeName = this.theme.name ) data class ReservationPaymentRequest( val paymentKey: String, val orderId: String, val amount: Int, val paymentType: PaymentType ) fun ReservationPaymentRequest.toPaymentConfirmRequest() = PaymentConfirmRequest( paymentKey = this.paymentKey, amount = this.amount, orderId = this.orderId, ) data class ReservationPaymentResponse( val reservationId: Long, val reservationStatus: ReservationStatus, val paymentId: Long, val paymentStatus: PaymentStatus, ) data class ReservationCancelRequest( val cancelReason: String, val requestedAt: LocalDateTime = LocalDateTime.now() )