/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.nlpcraft.model.tools.cmdline

private [cmdline] case class RestSpec(
    path: String,
    desc: String,
    group: String,
    params: Seq[RestSpecParameter]
)

private [cmdline] sealed trait JsonType

private [cmdline] case object STRING extends JsonType
private [cmdline] case object BOOLEAN extends JsonType
private [cmdline] case object NUMERIC extends JsonType
private [cmdline] case object OBJECT extends JsonType
private [cmdline] case object ARRAY extends JsonType

private [cmdline] case class RestSpecParameter(
    name: String,
    kind: JsonType,
    optional: Boolean = false // Mandatory by default.
)

// TODO: this needs to be loaded dynamically from OpenAPI spec.
/**
 * NLPCraft REST specification.
 */
private [cmdline] object NCCliRestSpec {
    //noinspection DuplicatedCode
    private [cmdline] final val REST_SPEC = Seq(
        RestSpec(
            path = "clear/conversation",
            desc = "Clears conversation STM",
            group = "Asking",
            params = Seq(
                RestSpecParameter(name = "acsTok", kind = STRING),
                RestSpecParameter(name = "mdlId", kind = STRING),
                RestSpecParameter(name = "usrId", kind = STRING, optional = true),
                RestSpecParameter(name = "usrExtId", kind = STRING, optional = true)
            )
        ),
        RestSpec(
            "clear/dialog",
            "Clears dialog flow",
            "Asking",
            params = Seq(
                RestSpecParameter(name = "acsTok", kind = STRING),
                RestSpecParameter(name = "mdlId", kind = STRING),
                RestSpecParameter(name = "usrId", kind = STRING, optional = true),
                RestSpecParameter(name = "usrExtId", kind = STRING, optional = true)
            )
        ),
        RestSpec(
            "model/sugsyn",
            "Runs model synonym suggestion tool",
            "Tools",
            params = Seq(
                RestSpecParameter(name = "acsTok", kind = STRING),
                RestSpecParameter(name = "mdlId", kind = STRING),
                RestSpecParameter(name = "minScore", kind = NUMERIC)
            )
        ),
        RestSpec(
            "model/syns",
            "Gets model element synonyms",
            "Tools",
            params = Seq(
                RestSpecParameter(name = "acsTok", kind = STRING),
                RestSpecParameter(name = "mdlId", kind = STRING),
                RestSpecParameter(name = "elmId", kind = STRING)
            )
        ),
        RestSpec(
            "model/info",
            "Gets model configuration and elements",
            "Tools",
            params = Seq(
                RestSpecParameter(name = "acsTok", kind = STRING),
                RestSpecParameter(name = "mdlId", kind = STRING)
            )
        ),
        RestSpec(
            "check",
            "Gets status and result of submitted requests",
            "Asking",
            params = Seq(
                RestSpecParameter(name = "acsTok", kind = STRING),
                RestSpecParameter(name = "usrId", kind = STRING, optional = true),
                RestSpecParameter(name = "usrExtId", kind = STRING, optional = true),
                RestSpecParameter(name = "srvReqIds", kind = ARRAY, optional = true),
                RestSpecParameter(name = "maxRows", kind = NUMERIC, optional = true)
            )
        ),
        RestSpec(
            "cancel",
            "Cancels a question",
            "Asking",
            params = Seq(
                RestSpecParameter(name = "acsTok", kind = STRING),
                RestSpecParameter(name = "usrId", kind = STRING, optional = true),
                RestSpecParameter(name = "usrExtId", kind = STRING, optional = true),
                RestSpecParameter(name = "srvReqIds", kind = ARRAY, optional = true),
            )
        ),
        RestSpec(
            "ask",
            "Asks a question",
            "Asking",
            params = Seq(
                RestSpecParameter(name = "acsTok", kind = STRING),
                RestSpecParameter(name = "usrId", kind = STRING, optional = true),
                RestSpecParameter(name = "usrExtId", kind = STRING, optional = true),
                RestSpecParameter(name = "txt", kind = STRING),
                RestSpecParameter(name = "mdlId", kind = STRING),
                RestSpecParameter(name = "data", kind = OBJECT, optional = true),
                RestSpecParameter(name = "enableLog", kind = BOOLEAN, optional = true),
            )
        ),
        RestSpec(
            "ask/sync",
            "Asks a question in synchronous mode",
            "Asking",
            params = Seq(
                RestSpecParameter(name = "acsTok", kind = STRING),
                RestSpecParameter(name = "usrId", kind = STRING, optional = true),
                RestSpecParameter(name = "usrExtId", kind = STRING, optional = true),
                RestSpecParameter(name = "txt", kind = STRING),
                RestSpecParameter(name = "mdlId", kind = STRING),
                RestSpecParameter(name = "data", kind = OBJECT, optional = true),
                RestSpecParameter(name = "enableLog", kind = BOOLEAN, optional = true),
            )
        ),
        RestSpec(
            "user/get",
            "Gets current user information",
            "User",
            params = Seq(
                RestSpecParameter(name = "acsTok", kind = STRING),
                RestSpecParameter(name = "id", kind = STRING, optional = true),
                RestSpecParameter(name = "usrExtId", kind = STRING, optional = true)
            )
        ),
        RestSpec(
            "user/all",
            "Gets all users",
            "User",
            params = Seq(
                RestSpecParameter(name = "acsTok", kind = STRING),
            )
        ),
        RestSpec(
            "user/update",
            "Updates regular user",
            "User",
            params = Seq(
                RestSpecParameter(name = "acsTok", kind = STRING),
                RestSpecParameter(name = "firstName", kind = STRING),
                RestSpecParameter(name = "lastName", kind = STRING),
                RestSpecParameter(name = "id", kind = STRING, optional = true),
                RestSpecParameter(name = "avatarUrl", kind = STRING, optional = true),
                RestSpecParameter(name = "properties", kind = OBJECT, optional = true)
            )
        ),
        RestSpec(
            "user/delete",
            "Deletes user",
            "User",
            params = Seq(
                RestSpecParameter(name = "acsTok", kind = STRING),
                RestSpecParameter(name = "id", kind = STRING, optional = true),
                RestSpecParameter(name = "usrExtId", kind = STRING, optional = true)
            )
        ),
        RestSpec(
            "user/admin",
            "Updates user admin permissions",
            "User",
            params = Seq(
                RestSpecParameter(name = "acsTok", kind = STRING),
                RestSpecParameter(name = "id", kind = STRING, optional = true),
                RestSpecParameter(name = "isAdmin", kind = BOOLEAN)
            )
        ),
        RestSpec(
            "user/passwd/reset",
            "Resets password for the user",
            "User",
            params = Seq(
                RestSpecParameter(name = "acsTok", kind = STRING),
                RestSpecParameter(name = "id", kind = STRING, optional = true),
                RestSpecParameter(name = "newPasswd", kind = STRING)
            )
        ),
        RestSpec(
            "user/add",
            "Adds new user",
            "User",
            params = Seq(
                RestSpecParameter(name = "acsTok", kind = STRING),
                RestSpecParameter(name = "firstName", kind = STRING),
                RestSpecParameter(name = "lastName", kind = STRING),
                RestSpecParameter(name = "email", kind = STRING),
                RestSpecParameter(name = "passwd", kind = STRING),
                RestSpecParameter(name = "isAdmin", kind = BOOLEAN),
                RestSpecParameter(name = "usrExtId", kind = STRING, optional = true),
                RestSpecParameter(name = "avatarUrl", kind = STRING, optional = true),
                RestSpecParameter(name = "properties", kind = OBJECT, optional = true)
            )
        ),
        RestSpec(
            "company/get",
            "Gets current user company information",
            "Company",
            params = Seq(
                RestSpecParameter(name = "acsTok", kind = STRING),
            )
        ),
        RestSpec(
            "company/add",
            "Adds new company",
            "Company",
            params = Seq(
                RestSpecParameter(name = "acsTok", kind = STRING),
                RestSpecParameter(name = "name", kind = STRING),
                RestSpecParameter(name = "website", kind = STRING, optional = true),
                RestSpecParameter(name = "country", kind = STRING, optional = true),
                RestSpecParameter(name = "region", kind = STRING, optional = true),
                RestSpecParameter(name = "city", kind = STRING, optional = true),
                RestSpecParameter(name = "address", kind = STRING, optional = true),
                RestSpecParameter(name = "postalCode", kind = STRING, optional = true),
                RestSpecParameter(name = "adminEmail", kind = STRING),
                RestSpecParameter(name = "adminPasswd", kind = STRING),
                RestSpecParameter(name = "adminFirstName", kind = STRING),
                RestSpecParameter(name = "adminLastName", kind = STRING),
                RestSpecParameter(name = "adminAvatarUrl", kind = STRING, optional = true)
            )
        ),
        RestSpec(
            "company/update",
            "Updates company data",
            "Company",
            params = Seq(
                RestSpecParameter(name = "acsTok", kind = STRING),
                RestSpecParameter(name = "name", kind = STRING),
                RestSpecParameter(name = "website", kind = STRING, optional = true),
                RestSpecParameter(name = "country", kind = STRING, optional = true),
                RestSpecParameter(name = "region", kind = STRING, optional = true),
                RestSpecParameter(name = "city", kind = STRING, optional = true),
                RestSpecParameter(name = "address", kind = STRING, optional = true),
                RestSpecParameter(name = "postalCode", kind = STRING, optional = true)
            )
        ),
        RestSpec(
            "company/delete",
            "Deletes company",
            "Company",
            params = Seq(
                RestSpecParameter(name = "acsTok", kind = STRING),
            )
        ),
        RestSpec(
            "company/token/reset",
            "Resets company probe auth token",
            "Company",
            params = Seq(
                RestSpecParameter(name = "acsTok", kind = STRING),
            )
        ),
        RestSpec(
            "feedback/add",
            "Adds feedback",
            "Asking",
            params = Seq(
                RestSpecParameter(name = "acsTok", kind = STRING),
                RestSpecParameter(name = "usrId", kind = STRING, optional = true),
                RestSpecParameter(name = "extUsrId", kind = STRING, optional = true),
                RestSpecParameter(name = "comment", kind = STRING, optional = true),
                RestSpecParameter(name = "srvReqId", kind = STRING),
                RestSpecParameter(name = "score", kind = STRING)
            )
        ),
        RestSpec(
            "feedback/delete",
            "Deletes feedback",
            "Asking",
            params = Seq(
                RestSpecParameter(name = "acsTok", kind = STRING),
                RestSpecParameter(name = "id", kind = NUMERIC)
            )
        ),
        RestSpec(
            "feedback/all",
            "Gets all feedback",
            "Asking",
            params = Seq(
                RestSpecParameter(name = "acsTok", kind = STRING),
                RestSpecParameter(name = "usrId", kind = STRING, optional = true),
                RestSpecParameter(name = "extUsrId", kind = STRING, optional = true),
                RestSpecParameter(name = "srvReqId", kind = STRING, optional = true)
            )
        ),
        RestSpec(
            "signin",
            "Signs in and obtains new access token",
            "Authentication",
            params = Seq(
                RestSpecParameter(name = "email", kind = STRING),
                RestSpecParameter(name = "passwd", kind = STRING)
            )
        ),
        RestSpec(
            "signout",
            "Signs out and releases access token",
            "Authentication",
            params = Seq(
                RestSpecParameter(name = "acsTok", kind = STRING),
            )
        ),
        RestSpec(
            "probe/all",
            "Gets all probes",
            "Probe",
            params = Seq(
                RestSpecParameter(name = "acsTok", kind = STRING),
            )
        )
    )
}
