# Copyright (c) 2012 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.

'''Count number of occurrences of a given message ID.'''

from __future__ import print_function

import getopt
import sys

from grit import grd_reader
from grit.tool import interface


class CountMessage(interface.Tool):
  '''Count the number of times a given message ID is used.'''

  def __init__(self):
    pass

  def ShortDescription(self):
    return 'Count the number of times a given message ID is used.'

  def ParseOptions(self, args):
    """Set this objects and return all non-option arguments."""
    own_opts, args = getopt.getopt(args, '', ('help',))
    for key, val in own_opts:
      if key == '--help':
        self.ShowUsage()
        sys.exit(0)
    return args

  def Run(self, opts, args):
    args = self.ParseOptions(args)
    if len(args) != 1:
      print('This tool takes a single tool-specific argument, the message '
            'ID to count.')
      return 2
    self.SetOptions(opts)

    id = args[0]
    res_tree = grd_reader.Parse(opts.input, debug=opts.extra_verbose)
    res_tree.OnlyTheseTranslations([])
    res_tree.RunGatherers()

    count = 0
    for c in res_tree.UberClique().AllCliques():
      if c.GetId() == id:
        count += 1

    print("There are %d occurrences of message %s." % (count, id))
