import os
import numpy as np
import sys
import json


def read_text_lines(filepath):
    with open(filepath, 'r') as f:
        lines = f.readlines()
    lines = [l.rstrip() for l in lines]
    return lines


def check_path(path):
    if not os.path.exists(path):
        os.makedirs(path, exist_ok=True)  # explicitly set exist_ok when multi-processing


def save_command(save_path, filename='command_train.txt'):
    check_path(save_path)
    command = sys.argv
    save_file = os.path.join(save_path, filename)
    # Save all training commands when resuming training
    with open(save_file, 'a') as f:
        f.write(' '.join(command))
        f.write('\n\n')


def save_args(args, filename='args.json'):
    args_dict = vars(args)
    check_path(args.checkpoint_dir)
    save_path = os.path.join(args.checkpoint_dir, filename)

    # Save all training args when resuming training
    with open(save_path, 'a') as f:
        json.dump(args_dict, f, indent=4, sort_keys=False)
        f.write('\n\n')


def int_list(s):
    """Convert string to int list"""
    return [int(x) for x in s.split(',')]
