import type { OrderItemDto } from "./order-item.dto.js"
import type { OrderStatus, PaymentMethod, PaymentProvider, PaymentAttemptStatus, ExecutionMethod } from "../enums.js"
import type { PromoCodeUsageDto } from "./promo-code.dto.js"
import type { OrderDepositLineDto } from "./deposit.dto.js"

export interface OrderPaymentDto {
    id: string
    amount: number
    method: PaymentMethod
    executionMethod: ExecutionMethod | null
    provider: PaymentProvider | null
    reference: string | null
    createdAt: string
}

export interface LastPaymentAttemptDto {
    id: string
    status: PaymentAttemptStatus
    method: PaymentMethod
    amount: number
    failureReason: string | null
    createdAt: string
}

export interface OrderListItemDto {
    id: string
    status: OrderStatus
    total: number
    depositTotal?: number
    createdAt: string
    itemCount: number
    createdById?: string | null
    createdByName?: string | null
    cashSessionId?: string | null
    sessionOrderNumber?: number | null
}

export interface OrderDetailDto {
    id: string
    status: OrderStatus
    total: number
    depositTotal: number
    discountTotal?: number
    createdAt: string
    createdById?: string | null
    createdByName?: string | null
    paidAt?: string
    stationId?: string | null
    cashSessionId?: string | null
    sessionOrderNumber?: number | null
    depositLines: OrderDepositLineDto[]
    orderItems: OrderItemDto[]
    payments?: OrderPaymentDto[]
    lastPaymentAttempt?: LastPaymentAttemptDto | null
    appliedPromoCodes?: PromoCodeUsageDto[]
}