nulldev
03/01/2017, 3:06 AMclass Huh {
    private interface UriFilter
    open class Filter<V>(val name: String, val state: V) {
        open class CheckBox(name: String, defValue: Boolean): Filter<Boolean>(name, defValue)
        open class Select<V>(name: String, state: Array<V>): Filter<Array<V>>(name, state)
        open class Group<V>(name: String, state: List<V>): Filter<List<V>>(name, state)
    }
    class AdvancedOption(name: String, val param: String, defValue: Boolean = false): Filter.CheckBox(name, defValue), UriFilter
    class RatingOption : Filter.Select<String>("", arrayOf("")), UriFilter
    class AdvancedGroup : UriGroup<Filter<*>>("", listOf(
            AdvancedOption("", "", true),
            AdvancedOption("", "", true),
            AdvancedOption("", ""),
            AdvancedOption("", ""),
            AdvancedOption("", ""),
            AdvancedOption("", ""),
            AdvancedOption("", ""),
            AdvancedOption("", ""),
            RatingOption()
    ))
    open class UriGroup<V>(name: String, state: List<V>) : Filter.Group<V>(name, state), UriFilter
    companion object {
        @JvmStatic fun main(args: Array<String>) {
            val test = Huh.AdvancedGroup()
            println(test.name)
            println(test.state)
        }
    }
}