import { Document, Types } from 'mongoose';
import { IPaginateModel } from '@/shared/interfaces/model.interface.js';
import { AuditFields } from '@/shared/types/common';

export interface ICategory extends Document {
  name: string;
  createdAt?: Date;
  updatedAt?: Date;
  createdBy?: Types.ObjectId;
  updatedBy?: Types.ObjectId;
}

export type ICategoryModel = IPaginateModel<ICategory>;

export interface ISubCategory extends Document {
  name: string;
  categoryId: Types.ObjectId;
  createdAt?: Date;
  updatedAt?: Date;
  createdBy?: Types.ObjectId;
  updatedBy?: Types.ObjectId;
}

export type ISubCategoryModel = IPaginateModel<ISubCategory>;

export interface IPropertySize extends Document {
  name: string;
  sqFeetUnit: number;
  createdAt?: Date;
  updatedAt?: Date;
  createdBy?: Types.ObjectId;
  updatedBy?: Types.ObjectId;
}

export type IPropertySizeModel = IPaginateModel<IPropertySize>;

export interface IPropertyUsage extends Document {
  name: string;
  createdAt?: Date;
  updatedAt?: Date;
  createdBy?: Types.ObjectId;
  updatedBy?: Types.ObjectId;
}

export type IPropertyUsageModel = IPaginateModel<IPropertyUsage>;

export interface IConfigurationBase {
  category: Types.ObjectId;
  subCategory: Types.ObjectId;
  name: string;
}

export interface IConfiguration extends IConfigurationBase, AuditFields {}

export interface IConfigurationDoc extends IConfiguration, Document {}

export type IConfigurationModel = IPaginateModel<IConfigurationDoc>;

export interface IPropertyFilter {
  search?: string;
  categoryId?: Types.ObjectId | string;
  subCategoryId?: Types.ObjectId | string;
}
