import org.jetbrains.kotlinx.dataframe.*
import org.jetbrains.kotlinx.dataframe.annotations.*
import org.jetbrains.kotlinx.dataframe.api.*
import org.jetbrains.kotlinx.dataframe.io.*

@DataSchema
class Bridge(val type: Type,
             val approximation: String,
             val converter: String,
             val lens: String,
             val supported: Boolean = false) : DataRowSchema

@DataSchema
data class Type(val name: String, val vararg: Boolean)

@DataSchema
class Parameter(
    val name: String,
    val returnType: Type,
    val defaultValue: String?,
) : DataRowSchema

@DataSchema
class Function(
    val receiverType: String,
    val function: String,
    val functionReturnType: Type,
    val parameters: List<Parameter>
) : DataRowSchema {
}


@DataSchema
class RefinedFunction(
    val receiverType: String,
    val function: String,
    val functionReturnType: Type,
    val parameters: List<Parameter>,
    val startingSchema: Parameter
) : DataRowSchema

fun DataFrame<Function>.refine(bridges: DataFrame<Bridge>) {
    val functions = this
    val df1 = functions.join(bridges) {
        functions.functionReturnType.name.match(right.type.name)
    }
    val col: DataColumn<DataFrame<*>> = df1.parameters
}

fun box(): String = "OK"
