import { IUserAddress } from './user.types';

export enum OrderStatus {
  PENDING = 'PENDING',
  PROCESSING = 'PROCESSING',
  SHIPPED = 'SHIPPED',
  DELIVERED = 'DELIVERED',
  CANCELLED = 'CANCELLED',
  REFUNDED = 'REFUNDED',
}

export enum PaymentStatus {
  UNPAID = 'UNPAID',
  PAID = 'PAID',
  FAILED = 'FAILED',
  REFUNDED = 'REFUNDED',
}

export enum PaymentMethod {
  RAZORPAY = 'RAZORPAY',
  STRIPE = 'STRIPE',
  COD = 'COD',
}

export interface IOrderItem {
  id: string;
  orderId: string;
  bookId: string;
  bookTitle: string;
  quantity: number;
  unitPrice: number;
  totalPrice: number;
  coverImage?: string;
  createdAt: string;
}

export interface IOrder {
  id: string;
  orderNumber: string;
  userId: string;
  status: OrderStatus;
  totalAmount: number;
  taxAmount: number;
  shippingAmount: number;
  discountAmount: number;
  shippingAddress: IUserAddress;
  billingAddress: IUserAddress;
  paymentStatus: PaymentStatus;
  paymentMethod?: PaymentMethod;
  paymentId?: string;
  items: IOrderItem[];
  trackingNumber?: string;
  carrier?: string;
  createdAt: string;
  updatedAt: string;
}

export interface ICreateOrderRequest {
  shippingAddressId: string;
  billingAddressId?: string;
  paymentMethod: PaymentMethod;
  notes?: string;
}

export interface IOrderStatusUpdate {
  orderId: string;
  status: OrderStatus;
  trackingNumber?: string;
  carrier?: string;
}

export interface IPaymentInitResponse {
  orderId: string;
  orderNumber: string;
  amount: number;
  currency: string;
  paymentGatewayKey: string;
  gatewayOrderId?: string;
}
