package org.jetbrains.dokka.Formats

import com.google.inject.Binder
import org.jetbrains.dokka.*
import org.jetbrains.dokka.Samples.KotlinWebsiteSampleProcessingService
import org.jetbrains.dokka.Utilities.bind
import kotlin.reflect.KClass

abstract class KotlinFormatDescriptorBase
    : FileGeneratorBasedFormatDescriptor(),
        DefaultAnalysisComponent,
        DefaultAnalysisComponentServices by KotlinAsKotlin {
    override val generatorServiceClass = FileGenerator::class
    override val outlineServiceClass: KClass<out OutlineFormatService>? = null
    override val packageListServiceClass: KClass<out PackageListService>? = DefaultPackageListService::class
}

abstract class HtmlFormatDescriptorBase : FileGeneratorBasedFormatDescriptor(), DefaultAnalysisComponent {
    override val formatServiceClass = HtmlFormatService::class
    override val outlineServiceClass = HtmlFormatService::class
    override val generatorServiceClass = FileGenerator::class
    override val packageListServiceClass = DefaultPackageListService::class

    override fun configureOutput(binder: Binder): Unit = with(binder) {
        super.configureOutput(binder)
        bind<HtmlTemplateService>().toProvider { HtmlTemplateService.default("style.css") }
    }
}

class HtmlFormatDescriptor : HtmlFormatDescriptorBase(), DefaultAnalysisComponentServices by KotlinAsKotlin

class HtmlAsJavaFormatDescriptor : HtmlFormatDescriptorBase(), DefaultAnalysisComponentServices by KotlinAsJava

class KotlinWebsiteFormatDescriptor : KotlinFormatDescriptorBase() {
    override val formatServiceClass = KotlinWebsiteFormatService::class
    override val outlineServiceClass = YamlOutlineService::class
}

class KotlinWebsiteFormatRunnableSamplesDescriptor : KotlinFormatDescriptorBase() {
    override val formatServiceClass = KotlinWebsiteRunnableSamplesFormatService::class
    override val sampleProcessingService = KotlinWebsiteSampleProcessingService::class
    override val outlineServiceClass = YamlOutlineService::class
}

class KotlinWebsiteHtmlFormatDescriptor : KotlinFormatDescriptorBase() {
    override val formatServiceClass = KotlinWebsiteHtmlFormatService::class
    override val sampleProcessingService = KotlinWebsiteSampleProcessingService::class
    override val outlineServiceClass = YamlOutlineService::class

    override fun configureOutput(binder: Binder) = with(binder) {
        super.configureOutput(binder)
        bind<HtmlTemplateService>().toInstance(EmptyHtmlTemplateService)
    }
}

class JekyllFormatDescriptor : KotlinFormatDescriptorBase() {
    override val formatServiceClass = JekyllFormatService::class
}

class MarkdownFormatDescriptor : KotlinFormatDescriptorBase() {
    override val formatServiceClass = MarkdownFormatService::class
}

class GFMFormatDescriptor : KotlinFormatDescriptorBase() {
    override val formatServiceClass = GFMFormatService::class
}
