#  ============LICENSE_START=======================================================
#  Copyright (C) 2021 Bell Canada
#  Modifications Copyright (C) 2021-2022 Nordix Foundation
#  ================================================================================
#  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=========================================================

updateDmiRegistration:
  post:
    description: Register a DMI Plugin with any new, updated or removed CM Handles.
    tags:
      - network-cm-proxy-inventory
    summary: DMI notifies NCMP of new CM Handles
    operationId: updateDmiPluginRegistration
    requestBody:
      required: true
      content:
        application/json:
          schema:
            $ref: 'components.yaml#/components/schemas/RestDmiPluginRegistration'
    responses:
      200:
        $ref: 'components.yaml#/components/responses/NoContent'
      400:
        $ref: 'components.yaml#/components/responses/BadRequest'
      401:
        $ref: 'components.yaml#/components/responses/Unauthorized'
      403:
        $ref: 'components.yaml#/components/responses/Forbidden'
      500:
        description: Partial or Complete failure. The error details are provided in the response body and all supported error codes are documented in the example.
        content:
          application/json:
            schema:
              $ref: 'components.yaml#/components/schemas/DmiPluginRegistrationErrorResponse'
            example:
              failedCreatedCmHandles: [
                {
                  "cmHandle": "my-cm-handle-01",
                  "errorCode": "00",
                  "errorText": "Unknown error. <error-details>"
                },
                {
                  "cmHandle": "my-cm-handle-02",
                  "errorCode": "01",
                  "errorText": "cm-handle already exists"
                },
                {
                  "cmHandle": "my-cm-handle-03",
                  "errorCode": "03",
                  "errorText": "cm-handle has an invalid character(s) in id"
                }
              ]
              failedUpdatedCmHandles: [
                {
                  "cmHandle": "my-cm-handle-01",
                  "errorCode": "00",
                  "errorText": "Unknown error. <error-details>"
                },
                {
                  "cmHandle": "my-cm-handle-02",
                  "errorCode": "02",
                  "errorText": "cm-handle does not exist"
                },
                {
                  "cmHandle": "my-cm-handle-03",
                  "errorCode": "03",
                  "errorText": "cm-handle has an invalid character(s) in id"
                }
              ]
              failedRemovedCmHandles: [
                {
                  "cmHandle": "my-cm-handle-01",
                  "errorCode": "00",
                  "errorText": "Unknown error. <error-details>"
                },
                {
                  "cmHandle": "my-cm-handle-02",
                  "errorCode": "02",
                  "errorText": "cm-handle does not exists"
                },
                {
                  "cmHandle": "my-cm-handle-03",
                  "errorCode": "03",
                  "errorText": "cm-handle has an invalid character(s) in id"
                }
              ]

getAllCmHandleIdsForRegisteredDmi:
  get:
    description: Get all cm handle IDs for a registered DMI plugin
    tags:
      - network-cm-proxy-inventory
    summary: Get all cm handle IDs for a registered DMI plugin (DMI plugin, DMI data plugin, DMI model plugin)
    operationId: getAllCmHandleIdsForRegisteredDmi
    parameters:
      - $ref: 'components.yaml#/components/parameters/dmiPluginIdentifierInQuery'
    responses:
      200:
        description: OK
        content:
          application/json:
            schema:
              type: array
              items:
                type: string
      401:
        $ref: 'components.yaml#/components/responses/Unauthorized'
      403:
        $ref: 'components.yaml#/components/responses/Forbidden'
      500:
        $ref: 'components.yaml#/components/responses/InternalServerError'