#!/usr/bin/env python
# Copyright (c) 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Chrome Version Tool

Scrapes Chrome channel information and prints out the requested nugget of
information.
"""

import json
import optparse
import os
import string
import sys
import urllib

URL = 'https://omahaproxy.appspot.com/json'


def main():
  try:
    data = json.load(urllib.urlopen(URL))
  except Exception as e:
    print 'Error: could not load %s\n\n%s' % (URL, str(e))
    return 1

  # Iterate to find out valid values for OS, channel, and field options.
  oses = set()
  channels = set()
  fields = set()

  for os_versions in data:
    oses.add(os_versions['os'])

    for version in os_versions['versions']:
      for field in version:
        if field == 'channel':
          channels.add(version['channel'])
        else:
          fields.add(field)

  oses = sorted(oses)
  channels = sorted(channels)
  fields = sorted(fields)

  # Command line parsing fun begins!
  usage = ('%prog [options]\n'
           'Print out information about a particular Chrome channel.')
  parser = optparse.OptionParser(usage=usage)

  parser.add_option('-o', '--os',
                    choices=oses,
                    default='win',
                    help='The operating system of interest: %s '
                         '[default: %%default]' % ', '.join(oses))
  parser.add_option('-c', '--channel',
                    choices=channels,
                    default='stable',
                    help='The channel of interest: %s '
                         '[default: %%default]' % ', '.join(channels))
  parser.add_option('-f', '--field',
                    choices=fields,
                    default='version',
                    help='The field of interest: %s '
                         '[default: %%default] ' % ', '.join(fields))
  (opts, args) = parser.parse_args()

  # Print out requested data if available.
  for os_versions in data:
    if os_versions['os'] != opts.os:
      continue

    for version in os_versions['versions']:
      if version['channel'] != opts.channel:
        continue

      if opts.field not in version:
        continue

      print version[opts.field]
      return 0

  print 'Error: unable to find %s for Chrome %s %s.' % (
      opts.field, opts.os, opts.channel)
  return 1

if __name__ == '__main__':
  sys.exit(main())