import { ModelDefinition } from "@nestjs/mongoose";
import { GeneralFeedback, GeneralFeedbackSchema } from "src/modules/general-feedback/models/general-feedback.model";
import { Verification, VerificationSchema } from "src/modules/auth/features/verifications/verifications.model";
import { ChatHistory, ChatHistorySchema } from "src/modules/chat-history/chat-history.model";
import { CompanyAnalytics, CompanyAnalyticsSchema } from "src/modules/company-analytics/company-analytics.model";
import { FeatureRequest, FeatureRequestSchema } from "src/modules/feature-request/feature-request.model";
import { Feedback, FeedbackSchema } from "src/modules/feedback/feedback.model";
import { ImageHistory, ImageHistorySchema } from "src/modules/image-history/model/image-history.model";
import { Subscription, SubscriptionSchema } from "src/modules/subscriptions/subscriptions.model";
import { UserAnalytics, UserAnalyticsSchema } from "src/modules/user-analytics/user-analytics.model";
import { User, UserSchema } from "src/modules/users/users.model";
import { BlockedImage, BlockedImageSchema } from "src/modules/blocked-images/blocked-images.model";
import { FilterPrompts, FilterPromptsSchema } from "src/modules/filter-prompts/filter-prompts.model";
import { FilterInstruction, FilterInstructionSchema } from "src/modules/filter-instruction/filter-instruction.model";
import { FilterTestResult, FilterTestResultSchema } from "src/modules/filter-test-result/filter-test-result.model";
import { FilterSetting, FilterSettingSchema } from "src/modules/filter-setting/filter-setting.model";
import { FilterBatch, FilterBatchSchema } from "src/modules/filter-batch/filter-batch.model";
import { Config, ConfigSchema } from "src/modules/app-config/config/config.model";

const models = {
	'User': {
		name: User.name,
		schema: UserSchema,
	},

	'Subscription': {
		name: Subscription.name,
		schema: SubscriptionSchema
	},

	'UserAnalytics': {
		name: UserAnalytics.name,
		schema: UserAnalyticsSchema
	},

	'CompanyAnalytics': {
		name: CompanyAnalytics.name,
		schema: CompanyAnalyticsSchema,
	},

	'Verification': {
		name: Verification.name,
		schema: VerificationSchema
	},
	'ChatHistory': {
		name: ChatHistory.name,
		schema: ChatHistorySchema
	},
	'ImageHistory': {
		name: ImageHistory.name,
		schema: ImageHistorySchema
	},
	"Feedback": {
		name: Feedback.name,
		schema: FeedbackSchema
	},
	"FeatureRequest": {
		name: FeatureRequest.name,
		schema: FeatureRequestSchema
	},
	"GeneralFeedback": {
		name: GeneralFeedback.name,
		schema: GeneralFeedbackSchema
	},
	"BlockedImage": {
		name: BlockedImage.name,
		schema: BlockedImageSchema
	},
	"FilterPrompts": {
		name: FilterPrompts.name,
		schema: FilterPromptsSchema
	},
	"FilterInstruction": {
		name: FilterInstruction.name,
		schema: FilterInstructionSchema
	},
	"FilterTestResult": {
		name: FilterTestResult.name,
		schema: FilterTestResultSchema
	},
	"FilterSetting": {
		name: FilterSetting.name,
		schema: FilterSettingSchema
	}, 
	"FilterBatch": {
		name: FilterBatch.name,
		schema: FilterBatchSchema
	},
	"Config": {
		name: Config.name,
		schema: ConfigSchema
	}
}

// type TModelName = keyof typeof models;

// export const getSchema = (...requiredModel: TModelName[]): ModelDefinition[] => {
// 	return requiredModel.map(model => {
// 		return {
// 			name: models[model].name,
// 			schema: models[model].schema
// 		}
// 	})
// }

export const getAllSchema = (): ModelDefinition[] => {
	return Object.keys(models).map(model => {
		return {
			name: models[model].name,
			schema: models[model].schema
		}
	})
}