import argparse

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('-b','--bootloader-file', help='Bootloader *.bin filename')
    parser.add_argument('-a','--application-file', help='Main application *.bin filename')
    parser.add_argument('-o','--offset', help="Byte offset for application file. Default 1MB (hex: 0x100000, decimal: 1,048,576)"
                                              " Hex can be input with \"0x\" prefix. Otherwise assumed decimal",default=0x100000)
    parser.add_argument('-f','--output-filename', help='Output *.bin filename. Default "combined.bin"',default="combined.bin")
    args=parser.parse_args()


    if args.bootloader_file is None:
        print("Need bootloader file.")
        exit()
    if args.application_file is None:
        print("Need application file.")
        exit()
    if type(args.offset) == str:
        if(args.offset.startswith("0x")):
            args.offset = int(args.offset[2:],16)
        else:
            args.offset = int(args.offset)


    
    with open(args.bootloader_file, 'rb') as bfi:
        bootfile = bfi.read()
    with open(args.application_file, 'rb') as afi:
        appfile = afi.read()

    print(f"Bootloader: {args.bootloader_file}, length: {len(bootfile)}, {hex(len(bootfile))}")
    print(f"Application: {args.application_file}, length: {len(appfile)}, {hex(len(appfile))}")
    print(f"Offset: {args.offset}, {hex(args.offset)}")

    if args.offset < len(bootfile):
        print("Error. Offset is less than bootloader file size.")
        exit()

    with open(args.output_filename, 'wb') as ofi:
        ofi.write(bootfile)
        ofi.write(bytes([0xFF for _ in range(args.offset - len(bootfile))]))
        ofi.write(appfile)

