#!/bin/bash --
#
# Generates dart_model definitions from `_fe_analyzer_shared` code.
#
# TODO(davidmorgan): this is intended to be single use code: delete if we don't
# need it again, convert to Dart if we do.
#
# mkdir /tmp/inputs
# cp ~/git/dart-sdk/sdk/pkg/_fe_analyzer_shared/lib/src/metadata/* /tmp/inputs
# rm /tmp/inputs/proto.dart /tmp/inputs/parser.dart /tmp/inputs/scope.dart
# tool/generate_definitions /tmp/inputs

path="$1"
source=$(find $path -name \*.dart | xargs cat)
IFS=$'\n'

echo "final definitions = ["

# Unions.
for union in $(
  echo "$source" \
  | grep 'sealed class' \
  | sed -e s'#sealed class ##' \
  | sed -e 's# {##' \
  | sort); do
  echo "Definition.union('$union',"
  echo "  description: '',"
  echo "  types: ["
  for type in $(echo "$source" \
    | grep "extends $union" \
    | sed -e 's#abstract ##' \
    | sed -e 's#class ##' \
    | sed -e 's# extends .*##'); do
    echo "    '$type',"
  done
  echo "  ],"
  echo "  properties: [],"
  echo "),";
done

# Enums.
for type in $(echo "$source" \
  | egrep '^enum [A-Z]' \
  | sed -e 's#enum ##' \
  | sed -e 's# .*##' \
  | sort); do
  echo "Definition.\$enum('$type',"
  echo "  description: '',"
  echo "  values: ["
  for line in $(echo "$source" \
    | grep -A1000000 "enum $type " \
    | tail -n +2); do
    if echo "$line" | grep -q ';'; then
      break
    else
      value=$(echo $line | sed -e 's#  ##' | sed -e 's#(.*##')
      echo "    '$value',"
    fi
  done
  echo "  ],"
  echo "),"
done

# Classes.
for type in $(echo "$source" \
  | egrep '^[a-z ]*class ' \
  | grep -v 'sealed' \
  | sed -e 's#abstract ##' \
  | sed -e 's#class ##' \
  | sed -e 's# extends .*##' \
  | sed -e 's# {##' \
  | sort); do
  echo "Definition.clazz('$type',"
  echo "  description: '',"
  echo "  properties: ["
  for line in $(echo "$source" \
    | grep -A1000000 "class $type extends" \
    | tail -n +2); do
    if echo "$line" | grep -q '  final'; then
      field_name=$(echo $line | sed -e 's#  final ##' | sed -e 's#.* ##' | sed -e 's#;##')
      if test "$field_name" == "unresolved"; then
        continue
      fi
      field_type=$(echo $line | sed -e 's#  final ##' | sed -e 's# .*##')
      if echo "$field_type" | fgrep -q '?'; then
        field_type=$(echo "$field_type" | sed -e 's#?##')
        echo "    Property('$field_name', type: '$field_type', description: '', nullable: true),"
      else
        echo "    Property('$field_name', type: '$field_type', description: ''),"
      fi
    else
      break
    fi
  done
  echo "  ],"
  echo "),"
done
echo "];"
