##   Licensed to the Apache Software Foundation (ASF) under one or more
##   contributor license agreements.  See the NOTICE file distributed with
##   this work for additional information regarding copyright ownership.
##   The ASF licenses this file to You 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.

# Reads the incubator podlings.xml file and generates a summary status file
# If a second file name is provided, also generates a detailed file with all the fields
#
# Podling status file format:
# {
#   "last_updated": "2016-06-15 13:50:05 +0100",
#   "podling": {
#     "abdera": "graduated",
#     ....
#   }
# }

# Podling detailed file format:
# {
#   "last_updated": "2016-06-15 13:50:05 +0100",
#   "podling": {
#     ...
#     "airflow": {
#       "name": "Airflow",
#       "resource": "airflow",
#       "status": "current",
#       "startdate": "2016-03-31",
#       "description": "Airflow is a workflow automation and scheduling system that can be used to author and manage data pipelines.",
#       "mentors": [
#         "cnauroth",
#         "hitesh",
#         "jghoman"
#       ],
#       "reporting": { # PROVISIONAL FORMAT
#          "group": "1",
#          "text": "May, June, July",
#          "monthly": [
#            "May",
#            "June",
#            "July"
#          ]
#         },
#       "champion": "criccomini",
#       "resource": "airflow",
#       "resourceAliases": [
#
#       ]
#     },
#     "accumulo": {
#       ...
#     },
#     ...
#   }
# }
#
# =====================================================
# N.B. The "reporting" hash format is subject to change
# =====================================================

require_relative 'public_json_common'

# figure out what to do to get svn updates, then uncomment this
# incubatorContent = ASF::SVN.find('incubator-content')
# incubatorPodlings = ASF::SVN.find('incubator-podlings')
# ASF::SVN.updateSimple(incubatorContent);
# ASF::SVN.updateSimple(incubatorPodlings);

pods = Hash[ASF::Podling.list.map {|podling| [podling.name, podling.status]}]

mtime =  ASF::Podling.mtime # must be after call to list()

public_json_output(
 last_updated: mtime,
 podling: pods
)

if ARGV.length == 2
  podh = Hash[ASF::Podling.list.map {|podling| [podling.name, podling.as_hash]}]
  podh.each do |p| # drop empty aliases
    p[1].delete(:resourceAliases) if p[1][:resourceAliases].length == 0
    p[1].delete(:duration) # This changes every day ...
  end
  public_json_output_file({
    last_updated: mtime,
    podling: podh
  }, ARGV[1])
end
