#!/bin/bash
# Copyright 2020-present Open Networking Foundation
# Original copyright 2020-present ADTRAN, Inc.
#
# 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

for version in $(curl -s https://pypi.org/pypi/device-management-interface/json | jq '.releases | keys' | jq '.[]'); do
    version=${version//\"/}
    filename=dmi_${version//\./\_}

    if [ -d ./grpc_robot/services/dmi/"$filename" ]; then

        python3 -m pip install -q device-management-interface=="$version"

        python3 -m robot.libdoc -P . grpc_robot.Dmi docs/"$filename".html
        python3 -m robot.libdoc -P . grpc_robot.Dmi docs/"$filename".xml
    fi

done

for version in $(curl -s https://pypi.org/pypi/voltha-protos/json | jq '.releases | keys' | jq '.[]'); do
    version=${version//\"/}
    filename=voltha_${version//\./\_}

    if [ -d ./grpc_robot/services/voltha/"$filename" ]; then

        python3 -m pip install -q voltha-protos=="$version"

        python3 -m robot.libdoc -P . grpc_robot.Voltha docs/"$filename".html
        python3 -m robot.libdoc -P . grpc_robot.Voltha docs/"$filename".xml
    fi

done

python3 -m robot.libdoc -P . grpc_robot.Collections docs/collections.html
python3 -m robot.libdoc -P . grpc_robot.Collections docs/collections.xml
python3 -m robot.libdoc -P . grpc_robot.DmiTools docs/dmi_tools.html
python3 -m robot.libdoc -P . grpc_robot.DmiTools docs/dmi_tools.xml
python3 -m robot.libdoc -P . grpc_robot.VolthaTools docs/voltha_tools.html
python3 -m robot.libdoc -P . grpc_robot.VolthaTools docs/voltha_tools.xml
