#!/usr/bin/python3
import sys, locale, os, gettext
#from locale import gettext as _
if os.path.exists('./ddlib.py'):
  from ddlib import *
else:
  from ddpy.ddlib import *

DOMAIN = 'ddpy'
LOCALE_DIR = '/usr/share/locale'
#locale.bindtextdomain(DOMAIN, LOCALE_DIR)
#locale.textdomain(DOMAIN)
gettext.bindtextdomain(DOMAIN, LOCALE_DIR)
gettext.textdomain(DOMAIN)
_ = gettext.gettext

def parse_arguments(args):
    params = {}
    params["block_size"] = "8M"
    for arg in args:
        if arg == "-h" or arg == "--help":
            HLP()
            sys.exit(0)
        elif arg.startswith("if="):
            params["source_file"] = arg.split("=")[1]
        elif arg.startswith("of="):
            params["destination_device"] = arg.split("=")[1]
        elif arg.startswith("bs="):
            params["block_size"] = arg.split("=")[1]

    return params

def HLP():
    """Display help message"""
    print(_("Usage: ddpy if=input_file of=output_device [bs=block_size]"))
    print(_("Parameters:"))
    print(_("  if=FILE    - input file (source)"))
    print(_("  of=DEVICE  - output device (destination)"))
    print(_("  bs=SIZE    - block size (default: 8M)"))
    print("\n" + _("Note: This syntax is similar to classic dd command"))
    sys.exit(0)

if __name__ == "__main__":
    params = parse_arguments(sys.argv[1:])

    if "source_file" not in params or "destination_device" not in params:
        print(_("Error: Missing required parameters"))
        print(_("Usage: ddpy if=input_file of=output_device"))
        sys.exit(1)
    
    cancheck = False
    if not zero_and_verify(params["destination_device"]):
        quit()
    
    check = checkisomd5(params["source_file"])
    if not check:
        print(_("Error: ISO MD5 checksum verification failed"))
        quit()
    elif check == 'NA':
        print(_("Warning: Built-in ISO MD5 checksum not available"))
    else:
        cancheck = True
    
    copy_file_to_device(params)
    
    if cancheck:
        if not checkisomd5(params["destination_device"]):
            print(_("Error: Written disk MD5 verification failed"))
            quit()
    
    if is_gpt(params["destination_device"]):
        print(_("==> Aligning GPT:"))
        sgdisk(params["destination_device"], "-e")
        
        print(_("==> Creating hybrid partition (GPT/MBR):"))
        info = get_partition_info(params["destination_device"])
        num_parts = ", ".join(str(i) for i in range(1, len(info) + 1))
        sgdisk(params["destination_device"], {
            "-h": num_parts,
            "-U": "random"
        })
    
    print(_("==> Verification:"))
    print(gdisk(params["destination_device"], ["-l", ]).stdout)
    
    
