﻿import mongoose, { Schema, Document } from 'mongoose';

export interface IContractDocument extends Document {
  _id: any;
  projectId: any;
  contractType: string; // Now dynamic from MongoDB ContractType collection
  contractNumber: string;
  partyA: string;
  partyB: string;
  customerCode?: string;
  customerGroup?: string;
  siteAddress?: string;
  capacityKWp?: number;
  startDate: Date;
  endDate: Date;
  value?: number;
  currency?: string;
  isFree?: boolean;
  paymentCycle?: '30_days' | '60_days' | 'custom';
  revenuePlan?: Array<{
    year: number;
    q1: number;
    q2: number;
    q3: number;
    q4: number;
  }>;
  debtAmount?: number;
  serviceTotal?: number;
  servicePerformed?: number;
  serviceFrequency?: string;
  status: 'draft' | 'active' | 'expired' | 'terminated' | 'negotiating' | 'suspended' | 'completed' | 'Expiring';
  notes?: string;
  documentUrl?: string;
  files?: Array<{
    filename: string;
    originalName: string;
    url: string;
    version: number;
    uploadedAt: Date;
  }>;
  createdAt: Date;
  updatedAt: Date;
}

const contractSchema = new Schema<IContractDocument>(
  {
    _id: { type: Schema.Types.Mixed, default: () => new mongoose.Types.ObjectId().toString() }, // Support both string demo IDs and auto-gen string IDs
    projectId: { type: Schema.Types.Mixed, ref: 'Project', required: true },
    contractType: {
      type: String,
      required: true,
      // No longer using enum - now references ContractType collection
    },
    contractNumber: { type: String, required: true, unique: true },
    partyA: { type: String, required: true },
    partyB: { type: String, required: true },
    customerCode: String,
    customerGroup: String,
    siteAddress: String,
    capacityKWp: Number,
    startDate: { type: Date, required: true },
    endDate: { type: Date, required: true },
    value: Number,
    currency: { type: String, default: 'VND' },
    isFree: { type: Boolean, default: false },
    paymentCycle: { type: String, enum: ['30_days', '60_days', 'custom'] },
    revenuePlan: [{
      year: Number,
      q1: Number,
      q2: Number,
      q3: Number,
      q4: Number,
    }],
    debtAmount: Number,
    serviceTotal: Number,
    servicePerformed: Number,
    serviceFrequency: String,
    status: {
      type: String,
      enum: ['draft', 'active', 'expired', 'terminated', 'negotiating', 'suspended', 'completed', 'Expiring'],
      default: 'draft',
    },
    notes: String,
    documentUrl: String,
    files: [{
      filename: String,
      originalName: String,
      url: String,
      version: Number,
      uploadedAt: Date,
    }],
  },
  {
    timestamps: true,
  }
);

contractSchema.index({ projectId: 1 });
contractSchema.index({ contractType: 1 });
contractSchema.index({ status: 1 });
contractSchema.index({ endDate: 1 });

export const Contract = mongoose.model<IContractDocument>('Contract', contractSchema);

