import { Prop, Schema, SchemaFactory } from "@nestjs/mongoose";
import { Document, Types } from "mongoose";
import { CartStatusEnum } from "../enums/cart-status.enum";
import { CurrencyCodeEnum } from "../enums/currency-code.enum";
import { Product } from "./product.schema";

// Defines the interface for your document
export type CartDocument = Cart & Document;

export class CartItem {
    @Prop({ type: [Types.ObjectId], ref: "Product" })
    product: Product;

    @Prop({ required: true, default: 1 })
    quantity: number;
}

@Schema()
export class Cart {
    @Prop({ default: false })
    isCheckoutable: boolean;

    @Prop({ required: true })
    referenceId: string;

    @Prop()
    items: CartItem[];

    @Prop({ default: 0 })
    itemCount: number;

    @Prop({ type: String, enum: Object.values(CartStatusEnum), default: CartStatusEnum.CREATED })
    status: keyof typeof CartStatusEnum;

    @Prop({ type: String, enum: Object.values(CurrencyCodeEnum), default: CurrencyCodeEnum.USD })
    currencyCode: keyof typeof CurrencyCodeEnum;

    @Prop({ required: true })
    expirationDateTime: Date;

    @Prop({ default: 0 })
    subtotal: number;
}

// Generates the actual Mongoose Schema
export const CartSchema = SchemaFactory.createForClass(Cart);
