#  ============LICENSE_START=======================================================
#  Copyright (C) 2021 Nordix Foundation
#  Modifications Copyright (C) 2021 Pantheon.tech
#  Modifications Copyright (C) 2021 Bell Canada
#  ================================================================================
#  Licensed 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
#
#        http://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.
#
#  SPDX-License-Identifier: Apache-2.0
#  ============LICENSE_END=========================================================

nodeByCmHandleAndXpath:
  get:
    description: Get a node with an option to retrieve all the children for a given cm Handle
    deprecated: true
    tags:
      - network-cm-proxy
    summary: Get a node given a cm Handle and xpath
    operationId: getNodeByCmHandleAndXpath
    parameters:
      - $ref: 'components.yaml#/components/parameters/cmHandleInPath'
      - $ref: 'components.yaml#/components/parameters/xpathInQuery'
      - $ref: 'components.yaml#/components/parameters/includeDescendantsOptionInQuery'
    responses:
      200:
        $ref: 'components.yaml#/components/responses/Ok'
      400:
        $ref: 'components.yaml#/components/responses/BadRequest'
      401:
        $ref: 'components.yaml#/components/responses/Unauthorized'
      403:
        $ref: 'components.yaml#/components/responses/Forbidden'
      404:
        $ref: 'components.yaml#/components/responses/NotFound'

nodesByCmHandleAndCpsPath:
  get:
    description: Query nodes for the given cps path and cm Handle
    deprecated: true
    tags:
      - network-cm-proxy
    summary: Query data nodes
    operationId: queryNodesByCmHandleAndCpsPath
    parameters:
      - $ref: 'components.yaml#/components/parameters/cmHandleInPath'
      - $ref: 'components.yaml#/components/parameters/cpsPathInQuery'
      - $ref: 'components.yaml#/components/parameters/includeDescendantsOptionInQuery'
    responses:
      200:
        $ref: 'components.yaml#/components/responses/Ok'
      400:
        $ref: 'components.yaml#/components/responses/BadRequest'
      401:
        $ref: 'components.yaml#/components/responses/Unauthorized'
      403:
        $ref: 'components.yaml#/components/responses/Forbidden'
      404:
        $ref: 'components.yaml#/components/responses/NotFound'

nodesByCmHandleAndXpath:
  post:
    description: Create a node with descendants for the given CM Handle; top level or under existing node (requires xpath)
    deprecated: true
    tags:
      - network-cm-proxy
    summary: Create a node with descendants
    operationId: createNode
    parameters:
      - $ref: 'components.yaml#/components/parameters/cmHandleInPath'
      - $ref: 'components.yaml#/components/parameters/xpathInQuery'
    requestBody:
      required: true
      content:
        application/json:
          schema:
            type: string
    responses:
      201:
        $ref: 'components.yaml#/components/responses/Created'
      400:
        $ref: 'components.yaml#/components/responses/BadRequest'
      401:
        $ref: 'components.yaml#/components/responses/Unauthorized'
      403:
        $ref: 'components.yaml#/components/responses/Forbidden'
      404:
        $ref: 'components.yaml#/components/responses/NotFound'

  patch:
    description: Update node leaves for the given cps path and cm Handle
    deprecated: true
    tags:
      - network-cm-proxy
    summary: Update node leaves
    operationId: updateNodeLeaves
    parameters:
      - $ref: 'components.yaml#/components/parameters/cmHandleInPath'
      - $ref: 'components.yaml#/components/parameters/xpathInQuery'
    requestBody:
      required: true
      content:
        application/json:
          schema:
            type: string
    responses:
      200:
        $ref: 'components.yaml#/components/responses/Ok'
      400:
        $ref: 'components.yaml#/components/responses/BadRequest'
      401:
        $ref: 'components.yaml#/components/responses/Unauthorized'
      403:
        $ref: 'components.yaml#/components/responses/Forbidden'
      404:
        $ref: 'components.yaml#/components/responses/NotFound'

  put:
    description: Replace a node with descendants for the given cps path and cm Handle
    deprecated: true
    tags:
      - network-cm-proxy
    summary: Replace a node with descendants
    operationId: replaceNode
    parameters:
      - $ref: 'components.yaml#/components/parameters/cmHandleInPath'
      - $ref: 'components.yaml#/components/parameters/xpathInQuery'
    requestBody:
      required: true
      content:
        application/json:
          schema:
            type: string
    responses:
      200:
        $ref: 'components.yaml#/components/responses/Ok'
      400:
        $ref: 'components.yaml#/components/responses/BadRequest'
      401:
        $ref: 'components.yaml#/components/responses/Unauthorized'
      403:
        $ref: 'components.yaml#/components/responses/Forbidden'
      404:
        $ref: 'components.yaml#/components/responses/NotFound'

listNodeByCmHandleAndXpath:
  post:
    description: Add one or more list-node child elements under existing node for the given CM Handle
    deprecated: true
    tags:
      - network-cm-proxy
    summary: Add list-node child element(s)
    operationId: addListNodeElements
    parameters:
      - $ref: 'components.yaml#/components/parameters/cmHandleInPath'
      - $ref: 'components.yaml#/components/parameters/requiredXpathInQuery'
    requestBody:
      required: true
      content:
        application/json:
          schema:
            type: string
    responses:
      201:
        $ref: 'components.yaml#/components/responses/Created'
      400:
        $ref: 'components.yaml#/components/responses/BadRequest'
      401:
        $ref: 'components.yaml#/components/responses/Unauthorized'
      403:
        $ref: 'components.yaml#/components/responses/Forbidden'
      404:
        $ref: 'components.yaml#/components/responses/NotFound'

getResourceDataForPassthroughOperational:
  get:
    tags:
      - network-cm-proxy
    summary: Get resource data from pass-through operational for cm handle
    description: Get resource data from pass-through operational for given cm handle
    operationId: getResourceDataOperationalForCmHandle
    parameters:
      - $ref: 'components.yaml#/components/parameters/cmHandleInPath'
      - $ref: 'components.yaml#/components/parameters/resourceIdentifierInQuery'
      - $ref: 'components.yaml#/components/parameters/acceptParamInHeader'
      - $ref: 'components.yaml#/components/parameters/optionsParamInQuery'
    responses:
      200:
        $ref: 'components.yaml#/components/responses/Ok'
      400:
        $ref: 'components.yaml#/components/responses/BadRequest'
      401:
        $ref: 'components.yaml#/components/responses/Unauthorized'
      403:
        $ref: 'components.yaml#/components/responses/Forbidden'
      404:
        $ref: 'components.yaml#/components/responses/NotFound'

resourceDataForPassthroughRunning:
  get:
    tags:
      - network-cm-proxy
    summary: Get resource data from pass-through running for cm handle
    description: Get resource data from pass-through running for given cm handle
    operationId: getResourceDataRunningForCmHandle
    parameters:
      - $ref: 'components.yaml#/components/parameters/cmHandleInPath'
      - $ref: 'components.yaml#/components/parameters/resourceIdentifierInQuery'
      - $ref: 'components.yaml#/components/parameters/acceptParamInHeader'
      - $ref: 'components.yaml#/components/parameters/optionsParamInQuery'
    responses:
      200:
        $ref: 'components.yaml#/components/responses/Ok'
      400:
        $ref: 'components.yaml#/components/responses/BadRequest'
      401:
        $ref: 'components.yaml#/components/responses/Unauthorized'
      403:
        $ref: 'components.yaml#/components/responses/Forbidden'
      404:
        $ref: 'components.yaml#/components/responses/NotFound'
  post:
    tags:
      - network-cm-proxy
    summary: create resource data from pass-through running for cm handle
    description: create resource data from pass-through running for given cm handle
    operationId: createResourceDataRunningForCmHandle
    parameters:
      - $ref: 'components.yaml#/components/parameters/cmHandleInPath'
      - $ref: 'components.yaml#/components/parameters/resourceIdentifierInQuery'
      - $ref: 'components.yaml#/components/parameters/contentParamInHeader'
    requestBody:
      required: true
      content:
        application/json:
          schema:
            type: string
        application/yang-data+json:
          schema:
            type: string
    responses:
      201:
        $ref: 'components.yaml#/components/responses/Created'
      400:
        $ref: 'components.yaml#/components/responses/BadRequest'
      401:
        $ref: 'components.yaml#/components/responses/Unauthorized'
      403:
        $ref: 'components.yaml#/components/responses/Forbidden'
      404:
        $ref: 'components.yaml#/components/responses/NotFound'

  put:
    tags:
      - network-cm-proxy
    summary: Update resource data from pass-through running for a cm handle
    description: Update resource data from pass-through running for the given cm handle
    operationId: updateResourceDataRunningForCmHandle
    parameters:
      - $ref: 'components.yaml#/components/parameters/cmHandleInPath'
      - $ref: 'components.yaml#/components/parameters/resourceIdentifierInQuery'
      - $ref: 'components.yaml#/components/parameters/contentParamInHeader'
    requestBody:
      required: true
      content:
        application/json:
          schema:
            type: string
        application/yang-data+json:
          schema:
            type: string
    responses:
      200:
        $ref: 'components.yaml#/components/responses/Ok'
      400:
        $ref: 'components.yaml#/components/responses/BadRequest'
      401:
        $ref: 'components.yaml#/components/responses/Unauthorized'
      403:
        $ref: 'components.yaml#/components/responses/Forbidden'
      404:
        $ref: 'components.yaml#/components/responses/NotFound'

fetchModuleReferencesByCmHandle:
  get:
    description: fetch all module references (name and revision) for a given cm handle
    tags:
      - network-cm-proxy
    summary: Fetch all module references (name and revision) for a given cm handle
    operationId: getModuleReferencesByCmHandle
    parameters:
      - $ref: 'components.yaml#/components/parameters/cmHandleInPath'
    responses:
      200:
        description: OK
        content:
          application/json:
            schema:
              type: string
            example: [{"moduleName": "nc-notifications", "revision": "2008-07-14"}]
        $ref: 'components.yaml#/components/responses/Ok'
      400:
        $ref: 'components.yaml#/components/responses/BadRequest'
      401:
        $ref: 'components.yaml#/components/responses/Unauthorized'
      403:
        $ref: 'components.yaml#/components/responses/Forbidden'
      404:
        $ref: 'components.yaml#/components/responses/NotFound'

executeCmHandleSearch:
  post:
    description: Execute cm handle searches using 'hasAllModules' condition to get all cm handles for the given module names
    tags:
      - network-cm-proxy
    summary: Execute cm handle search using the available conditions
    operationId: executeCmHandleSearch
    requestBody:
      required: true
      content:
        application/json:
          schema:
            $ref: 'components.yaml#/components/schemas/Conditions'
    responses:
      200:
        description: OK
        content:
          application/json:
            schema:
              $ref: 'components.yaml#/components/schemas/CmHandles'
      400:
        $ref: 'components.yaml#/components/responses/BadRequest'
      401:
        $ref: 'components.yaml#/components/responses/Unauthorized'
      403:
        $ref: 'components.yaml#/components/responses/Forbidden'