#!/usr/bin/python2
#
#Copyright (C) 2015 vmware inc.
#
#Author:    Harish    Udaiya    Kumar    <hudaiyakumar@vmware.com>
from SpecUtils import Specutils
from SpecData import SerializedSpecObjects
from RepoDeps import RepoQueryDependency
import sys
import os
from optparse import OptionParser

DEFAULT_INPUT_TYPE      =    "json"
DEFAULT_DISPLAY_OPTION  =    "tree"
SPEC_FILE_DIR           =    "../../SPECS"
INPUT_DATA_DIR          =    "../../common/data"

def reportMissing(pkg,specDepList, repoDepList, excludeList):
    missingList = [];
    if None != repoDepList:
        for repoItem in repoDepList:
            if repoItem not in excludeList and (None == specDepList or repoItem  not in specDepList):
                missingList.append(repoItem)
    if missingList:
        if len(pkg) <= 7:
            print pkg, "missing\t\t->", missingList
        else:
            print pkg, "missing\t->", missingList

def    main():
    usage = os.path.basename(__file__)    +    "--input-type=[json/pkg]    --pkg=[pkg_name]    --file=<JSON_FILE_NAME>    --repo-file=<photon>.repo"
    parser = OptionParser(usage)
    parser.add_option("-i",    "--input-type",    dest="input_type",    default=DEFAULT_INPUT_TYPE)
    parser.add_option("-p",    "--pkg",    dest="pkg")
    parser.add_option("-f",    "--file",    dest="json_file",    default="packages_full.json")
    parser.add_option("-s",    "--spec-dir",    dest="spec_dir",    default=SPEC_FILE_DIR)
    parser.add_option("-a",    "--input-data-dir",    dest="input_data_dir",    default=INPUT_DATA_DIR)
    parser.add_option("-r",    "--repo-file",    dest    =    "repo_file",    default="")
    excludeList = ["bash","glibc","libgcc","pkg-config","filesystem"]
    (options, args) = parser.parse_args()

    if(options.repo_file    ==    ""):
        print "Error! repo file not provided"
        print usage
        return

    if(False    ==    options.input_data_dir.endswith('/')):
        options.input_data_dir    +=    '/'

    specDeps = SerializedSpecObjects(options.input_data_dir,    "")
    repoDeps = RepoQueryDependency(options.repo_file)
    displayOption = None
    abs_path = os.path.abspath(__file__)
    dir_name = os.path.dirname(abs_path)
    os.chdir(dir_name)

    if(options.input_type == "pkg"):
        targetName = options.pkg
        specDepList = specDeps.readSpecsAndConvertToSerializableObjects(options.spec_dir,    options.input_type,    targetName,    displayOption)
        repoDepList = repoDeps.getRequiresList(targetName)
        reportMissing(targetName,specDepList,repoDepList,excludeList)
    elif(options.input_type == "json"):
        filePath = options.input_data_dir    +    options.json_file
        data = specDeps.get_all_package_names(filePath)
        for pkg in data:
            specDepList = specDeps.readSpecsAndConvertToSerializableObjects(options.spec_dir,    "pkg"    ,    pkg,    displayOption)
            repoDepList = repoDeps.getRequiresList(pkg)
            reportMissing(pkg,specDepList,repoDepList,excludeList)
    sys.exit(0)

if    __name__=="__main__":
                main()