#!/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
