/* Copyright 2025-2026 Eugene Petrenko (mcp@jonnyzzz.com); Copyright 2025-2026 JetBrains. Use of this source code is governed by the Apache 2.0 license. */
package com.jonnyzzz.mcpSteroid.promptgen

import com.jonnyzzz.mcpSteroid.prompts.ArticleBase
import com.jonnyzzz.mcpSteroid.prompts.ArticlePart
import com.jonnyzzz.mcpSteroid.prompts.IdeFilter
import com.jonnyzzz.mcpSteroid.prompts.PromptBase
import com.jonnyzzz.mcpSteroid.prompts.PromptIndexBase
import com.jonnyzzz.mcpSteroid.prompts.PromptRootBase
import com.jonnyzzz.mcpSteroid.prompts.SeeAlsoItem
import com.squareup.kotlinpoet.ANY
import com.squareup.kotlinpoet.ClassName
import com.squareup.kotlinpoet.MemberName
import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy
import com.squareup.kotlinpoet.asClassName
import java.io.File

class PromptGenerationContext(
    val inputRoot: File,
    val outputRoot: File,
    val testOutputRoot: File,
) {
    val packageName = "com.jonnyzzz.mcpSteroid.prompts.generated"
    val serviceAnnotation = ClassName("com.intellij.openapi.components", "Service")

    // Generate AllPrompts aggregator class
    val sequenceOfAny = Sequence::class.asClassName().parameterizedBy(ANY)
    val serviceMember = MemberName("com.intellij.openapi.components", "service")

    val promptBaseClass = PromptBase::class.asClassName()
    val promptIndexBaseClass = PromptIndexBase::class.asClassName()
    val promptRootBaseClass = PromptRootBase::class.asClassName()
    val promptArticleClass = ArticleBase::class.asClassName()
    val articlePartClass = ArticlePart::class.asClassName()
    val articlePartMarkdownClass = ArticlePart.Markdown::class.asClassName()
    val articlePartKotlinCodeClass = ArticlePart.KotlinCode::class.asClassName()
    val ideFilterClass = IdeFilter::class.asClassName()
    val seeAlsoItemClass = SeeAlsoItem::class.asClassName()
}
