#!/usr/bin/env python3

import sys
import argparse

from ytool import YTool

parser = argparse.ArgumentParser(description='Set values in yaml file preserving format and comments.')
parser.add_argument("--file", "-f", action="store",
    help="Name of the chart file to change", required=True)
parser.add_argument("--set-string", "-s", action='append', nargs=2, default=list(),
    metavar=('path', 'value'), help='Set string value for path')
parser.add_argument("--set-string-keyvalue", "-k", action='append', nargs=5, default=list(),
    metavar=('path', 'search_key', 'search_value', 'new_key', 'value'), help='Set string value for path, searching by key value pair')
parser.add_argument("--set-int", "-i", action='append', nargs=2, default=list(),
    metavar=('path', 'value'), help='Set integer value for path')
parser.add_argument("--set-float", "-d", action='append', nargs=2, default=list(),
    metavar=('path', 'value'), help='Set float value for path')
parser.add_argument("--output", "-o", action="store", default=None,
    help="Name of output file")
parser.add_argument("--edit-file", "-e", action="store_true", default=False,
    help="Edit input file directly")
parser.add_argument("--verbose", "-v", action="store_true", default=False,
    help="Print debug information to stdout")
args = parser.parse_args()

if args.verbose:
    print(args)

ytool = YTool()
ytool.preserve_quotes = True

with open(args.file) as file:
    data = ytool.load(file)

    for item in args.set_string:
        ytool.set_path_value(data, item[0], item[1])

    for item in args.set_string_keyvalue:
        ytool.set_path_by_value(data, item[0], (item[1], item[2]), (item[3], item[4]))

    for item in args.set_int:
        ytool.set_path_value(data, item[0], int(item[1]))

    for item in args.set_float:
        ytool.set_path_value(data, item[0], float(item[1]))

if args.edit_file:
    with open(args.file, 'w') as output:
        ytool.dump(data, output)
else:
    if not args.output:
        ytool.dump(data, sys.stdout)
    else:
        with open(args.output, 'w') as output:
            ytool.dump(data, output)
