#!/usr/bin/python2
# Copyright (C) 2019 Red Hat, Inc.
#
# This software is licensed to you under the GNU General Public
# License as published by the Free Software Foundation; either version
# 2 of the License (GPLv2) or (at your option) any later version.
# There is NO WARRANTY for this software, express or implied,
# including the implied warranties of MERCHANTABILITY,
# NON-INFRINGEMENT, or FITNESS FOR A PARTICULAR PURPOSE. You should
# have received a copy of GPLv2 along with this software; if not, see
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.


""" Tool for re-enabling of repos after upgrade of rhui client package. """
from ConfigParser import ConfigParser
import os
import argparse


REPO_RENAME = {
    'rhui-REGION-rhel-server-debug-extras':'rhel-7-server-rhui-extras-debug-rpms',
    'rhui-REGION-rhel-server-debug-optional':'rhel-7-server-rhui-optional-debug-rpms',
    'rhui-REGION-rhel-server-debug-rh-common':'rhel-7-server-rhui-rh-common-debug-rpms',
    'rhui-REGION-rhel-server-debug-rhscl':'rhel-server-rhui-rhscl-7-debug-rpms',
    'rhui-REGION-rhel-server-debug-supplementary':'rhel-7-server-rhui-supplementary-debug-rpms',
    'rhui-REGION-rhel-server-extras':'rhel-7-server-rhui-extras-rpms',
    'rhui-REGION-rhel-server-optional':'rhel-7-server-rhui-optional-rpms',
    'rhui-REGION-rhel-server-releases':'rhel-7-server-rhui-rpms',
    'rhui-REGION-rhel-server-releases-debug':'rhel-7-server-rhui-debug-rpms',
    'rhui-REGION-rhel-server-releases-source':'rhel-7-server-rhui-source-rpms',
    'rhui-REGION-rhel-server-rh-common':'rhel-7-server-rhui-rh-common-rpms',
    'rhui-REGION-rhel-server-rhscl':'rhel-server-rhui-rhscl-7-rpms',
    'rhui-REGION-rhel-server-source-extras':'rhel-7-server-rhui-extras-source-rpms',
    'rhui-REGION-rhel-server-source-optional':'rhel-7-server-rhui-optional-source-rpms',
    'rhui-REGION-rhel-server-source-rh-common':'rhel-7-server-rhui-rh-common-source-rpms',
    'rhui-REGION-rhel-server-source-rhscl':'rhel-server-rhui-rhscl-7-source-rpms',
    'rhui-REGION-rhel-server-source-supplementary':'rhel-7-server-rhui-supplementary-source-rpms',
    'rhui-REGION-rhel-server-supplementary':'rhel-7-server-rhui-supplementary-rpms',
    'rhui-codeready-builder-for-rhel-8-rhui-source-rpms':'codeready-builder-for-rhel-8-rhui-source-rpms',
    'rhui-codeready-builder-for-rhel-8-rhui-rpms':'codeready-builder-for-rhel-8-rhui-rpms',
    'rhui-codeready-builder-for-rhel-8-rhui-debug-rpms':'codeready-builder-for-rhel-8-rhui-debug-rpms'
}

def main():
    argparser = argparse.ArgumentParser(description='Will restore repos enabled in \
                    previous version of rhui client package based on .rpmsave file.')
    argparser.add_argument('--oldrepo',
                           help='Repofile containng old repos setting',
                           default='/etc/yum.repos.d/redhat-rhui.repo.rpmsave')
    argparser.add_argument('--newrepo',
                           help='Currently used repo file',
                           default='/etc/yum.repos.d/redhat-rhui.repo')
    args = argparser.parse_args()
    old_repo_filename = args.oldrepo
    new_repo_filename = args.newrepo

    if not os.path.isfile(old_repo_filename):
        print("%s was not found. Exiting." % old_repo_filename)
        exit(1)


    if not os.path.isfile(new_repo_filename):
        print("%s was not found. Exiting." % new_repo_filename)
        exit(1)

    old_repo_file = ConfigParser()
    new_repo_file = ConfigParser()

    old_repo_file.read(old_repo_filename)
    new_repo_file.read(new_repo_filename)

    old_enabled_list = [repo for repo in old_repo_file.sections() if old_repo_file.getboolean(repo, "enabled")]
    new_enabled_list = []
    for repo in old_enabled_list:
        if repo in REPO_RENAME:
            new_enabled_list.append(REPO_RENAME[repo])
        else:
            if repo.startswith('rhui-'):
                repo = repo[5:]
            new_enabled_list.append(repo)

    for repo in new_repo_file.sections():
        if repo in new_enabled_list:
            new_repo_file.set(repo, 'enabled', '1')
        else:
            new_repo_file.set(repo, 'enabled', '0')

    try:
        with open(new_repo_filename, 'w') as configfile:
            new_repo_file.write(configfile)
        print("Repos have been re-enabled in %s based on the contents of %s." % (new_repo_filename, old_repo_filename))
    except:
        print("Error while writing to %s" % new_repo_filename)
        exit(1)
    
    return 0


if __name__ == '__main__':
    main()
