#!/bin/bash -e
#
# Copyright 2018-present The Material Components for iOS Authors. All Rights Reserved.
#
# 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.

usage() {
  echo "Usage: $0"
  echo
  echo "Generates all root readmes for every public component."
  echo
  echo "Example usage: $0"
}

declare -a components_with_material_io_readmes=("Buttons")

find components -type d | cut -d'/' -f1-2 | sort | uniq | grep / | while read line; do
  component=$(echo "$line" | cut -d'/' -f2)
  if [ ! -f "$line/docs/README.md" ]; then
    continue
  fi

  if [ ${#components_with_material_io_readmes[@]} -eq 0 ]; then
      echo "Generating readme for $component..."
      ./scripts/generate_readme $component
  else
    for component_with_material_io_readme in "${components_with_material_io_readmes[@]}"
    do
      if [ "$component_with_material_io_readme" = "$component" ]; then
        continue
      else
        echo "Generating readme for $component..."
        ./scripts/generate_readme $component
      fi
    done
  fi
done
