#!/usr/bin/python

def getArgs():
    from argparse import ArgumentParser

    parser = ArgumentParser()
    parser.add_argument('insert_idx', \
        help='''where to input index: 0 at start , -1 for last''')
    parser.add_argument('part_name')
    parser.add_argument('part_size')
    parser.add_argument('part_file',nargs='?',default="")
    parser.add_argument('part_user_type',nargs='?',default="0x8000")
    parser.add_argument('--file',default='sys_partition.fex',dest='cfg_file')
    return parser.parse_args()

if __name__ == '__main__':

    args = getArgs()

    f = open(args.cfg_file,'r')
    raw = f.readlines()
    f.close()

    already_insered=False
    partidx = 0
    part_names=[]
    for line in raw:
        if line.find(';')==0:
            continue
        if line.find('[partition]')>=0:
            partidx += 1
        if line.find('name')>=0:
            tmpline = line.replace(' ','')
            partname=tmpline[tmpline.find('=')+1:-1]
            part_names.append(partname)
            if partname == args.part_name:
                already_insered=True

    if not already_insered:
        partcnt = partidx
        insert_idx = int(args.insert_idx)
        if insert_idx < 0:
            if partcnt + insert_idx < 0:
                print('idx'+str(insert_idx)+'out of range')
            else:
                insert_at = partcnt + 1 + insert_idx
        else:
            if insert_idx > partcnt:
                print('idx'+str(insert_idx)+'out of range')
            else:
                insert_at = insert_idx

        partidx = 0
        f = open(args.cfg_file,'w')
        for line in raw:
            if line.find(';')!=0:
                if line.find('[partition]')>=0:
                    if partidx == insert_at:
                        f.writelines('[partition]\n')
                        f.writelines('    name         = '+args.part_name+'\n')
                        f.writelines('    size         = '+args.part_size+'\n')
                        if len(args.part_file)>=1:
                            f.writelines('    downloadfile = "'+args.part_file+'"\n')
                        f.writelines('    user_type    = '+args.part_user_type+'\n'+'\n')
                        already_insered = 1
                    partidx+=1
            f.writelines(line)
        if not already_insered:
            f.writelines('[partition]\n')
            f.writelines('    name         = '+args.part_name+'\n')
            f.writelines('    size         = '+args.part_size+'\n')
            if len(args.part_file)>=1:
                f.writelines('    downloadfile = "'+args.part_file+'"\n')
            f.writelines('    user_type    = '+args.part_user_type+'\n'+'\n')
            already_insered = 1


