import os
import json
import shutil
import argparse


def is_valid_json(filepath):
    try:
        with open(filepath, "r", encoding="utf-8") as f:
            json.load(f)
        return True
    except Exception:
        return False


def main(input_dir):
    valid_dir = os.path.join(input_dir, "valid")
    invalid_dir = os.path.join(input_dir, "invalid")

    os.makedirs(valid_dir, exist_ok=True)
    os.makedirs(invalid_dir, exist_ok=True)

    for file in os.listdir(input_dir):
        file_path = os.path.join(input_dir, file)

        if os.path.isfile(file_path):

            # skip files already inside valid/invalid
            if file in ["valid", "invalid"]:
                continue

            if is_valid_json(file_path):
                shutil.move(file_path, os.path.join(valid_dir, file))
                print(f"VALID: {file}")
            else:
                shutil.move(file_path, os.path.join(invalid_dir, file))
                print(f"INVALID: {file}")


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("directory", help="Directory containing JSON files")
    args = parser.parse_args()

    main(args.directory)