#!/usr/bin/env python3
# Copyright (c) 2024 Arista Networks, Inc.  All rights reserved.
# Arista Networks, Inc. Confidential and Proprietary.

import argparse
import sys
import json
from CoreAnnotation import readAnnotationData

def isIterable( a ):
   try:
      iter( a )
      return True
   except TypeError:
      return False

def main():
   parser = argparse.ArgumentParser(
      description='Display installed software annotation appended to Eos core files'
   )
   parser.add_argument(
      '-j',
      '--json',
      action='store_true',
      help="display output in json format"
   )

   parser.add_argument(
      '-v',
      '--verbose',
      action='store_true',
      help="Generate list of removed packages; has no effect on json output."
   )

   parser.add_argument(
      'filename',
      help="path to uncompressed core"
   )

   args = parser.parse_args()

   try:
      data = readAnnotationData( args.filename )
   except OSError as e:
      print( f"Cannot open {args.filename}: {str(e)} ", file=sys.stderr )
      sys.exit( 1 )
   except ValueError as e:
      print( f"Error: {str(e)}", file=sys.stderr )
      sys.exit( 1 )
   if args.json:
      print( json.dumps( data ) )
   else:
      # Determine longest key & print contents indented equally.
      ll = len( max( data, key=len ) )
      pre = "   "
      for k, v in data.items():
         if k == "RemovedPackages" and not args.verbose:
            continue
         if not isinstance( v, str ) and isIterable( v ):
            print( f"{pre}{k}:" )
            for i in v:
               print( f"{pre}  {ll*' '}{i}" )
         else:
            print( f"{pre}{k}: {(ll-len(k))*' '}{v}" )
   sys.exit( 0 )

if __name__ == "__main__":
   main()
