import { z } from "zod"
import { PAYMENT_METHODS, EXECUTION_METHODS } from "../enums.js"

export const StartPaymentAttemptSchema = z.object({
    amount: z.number().int().positive(),
    method: z.enum(PAYMENT_METHODS),
    executionMethod: z.enum(EXECUTION_METHODS).optional(),
    stationId: z.string().uuid().optional(),
    shopPaymentMethodConfigId: z.string().uuid().optional(),
    stationPaymentMethodConfigId: z.string().uuid().optional()
})

export const FinalizeOrderPaymentSchema = z.object({
    amount: z.number().int().positive(),
    method: z.enum(PAYMENT_METHODS),
    reference: z.string().trim().min(1).optional(),
    paymentAttemptId: z.string().uuid().optional()
})

export const ManualResolvePaymentAttemptSchema = z.object({
    status: z.enum(["PAID", "FAILED"]),
    reason: z.string().trim().min(1).max(500).optional(),
    reference: z.string().trim().min(1).max(255).optional()
})

export const PaymentTerminalStatusChangedSchema = z.object({
    deviceId: z.string().uuid(),
    status: z.enum(["busy", "refresh_required"]),
    paymentAttemptId: z.string().uuid().nullable().optional(),
    orderId: z.string().uuid().nullable().optional(),
    stationId: z.string().uuid().nullable().optional(),
    reason: z.string().trim().min(1).max(500).nullable().optional(),
})

export type StartPaymentAttemptInput = z.infer<typeof StartPaymentAttemptSchema>
export type FinalizeOrderPaymentInput = z.infer<typeof FinalizeOrderPaymentSchema>
export type ManualResolvePaymentAttemptInput = z.infer<typeof ManualResolvePaymentAttemptSchema>
export type PaymentTerminalStatusChangedInput = z.infer<typeof PaymentTerminalStatusChangedSchema>

