import mongoose, { Schema, models, model } from "mongoose";
import { EXPENSE_CATEGORIES, type ExpenseCategory } from "@/lib/expenseConstants";

export { EXPENSE_CATEGORIES };
export type { ExpenseCategory };

export interface ExpenseDoc {
  _id: string;
  date: Date;
  category: ExpenseCategory;
  description: string;
  amount: number;
  vatAmount: number;
  receiptFilename: string;
  receiptStoredName: string;
  createdBy: mongoose.Types.ObjectId;
  createdAt: Date;
}

const expenseSchema = new Schema<ExpenseDoc>(
  {
    date: { type: Date, required: true },
    category: { type: String, enum: EXPENSE_CATEGORIES, default: "other" },
    description: { type: String, required: true, trim: true, maxlength: 300 },
    amount: { type: Number, required: true, min: 0 },
    vatAmount: { type: Number, default: 0, min: 0 },
    receiptFilename: { type: String, default: "" },
    receiptStoredName: { type: String, default: "" },
    createdBy: { type: Schema.Types.ObjectId, ref: "Client", required: true },
  },
  { timestamps: true }
);

export const Expense = (models.Expense as mongoose.Model<ExpenseDoc>) || model<ExpenseDoc>("Expense", expenseSchema);
