import load_config
import image_processing

import os, sys, time, argparse, random

def parse_arguments():
    parser = argparse.ArgumentParser(description="Social Photos Uploader")
    parser.add_argument('path', help="Directory or file path")
    parser.add_argument('-r', '--random', action='store_true', help="Randomly select one photo to upload")
    parser.add_argument('-d', '--delete', action='store_true', help="Delete the image files once uploaded")
    return parser.parse_args()

def main():
    args = parse_arguments()

    path = args.path
    random_mode = args.random
    delete_mode = args.delete

    # Check path exists, whether file or directory and output a list of files        
    if not os.path.exists(path):
        print(f"'{path}' does not exist.", file=sys.stderr)
        sys.exit(1)
    elif os.path.isfile(path):
        print(f"'{path}' is a file.")
        files = [path]
    elif os.path.isdir(path):
        print(f"'{path}' is a directory.")
        files = list_files_in_directory(path)
    else:
        print(f"'{path}' is neither a file nor a directory.", file=sys.stderr)
        sys.exit(1)

    # If random_mode, select random image from the files list and store it as the files list.
    if random_mode:
        if not files:
            print("No files found", file=sys.stderr)
            sys.exit(1)
        selected_file = random.choice(files)
        files = [selected_file]
    
    print("These files will be uploaded:")
    for item in files:
        print(item)
    confirmation = input("Proceed? (y/n): ").strip().lower()
    
    if confirmation != 'y':
        print("Cancelling operation")
        sys.exit(0)

    if delete_mode:
        delete_confirm = input("Files will be PERMANENTLY DELETED once uploads are complete!  Proceed? (y/n): ").strip().lower()
        if delete_confirm != 'y':
            print("Cancelling Operation")
            sys.exit(0)

    file_data = []
    for item in files:
        item_data = image_processing.get_image_data(item)
        file_data.append(item_data)

    # Collection of post URL's which can be used for sharing features
    # Where the API used doesn't support responding with a URL, a status
    # message is provided.
    posts = {}

    if load_config.config['pixelfed']['enable']:
        print("Pixelfed publishing enabled")
        import publish_pixelfed
        posts['pixelfed'] = publish_pixelfed.upload(file_data)

    if load_config.config['flickr']['enable']:
        print("Flickr publishing enabled")
        import publish_flickr
        posts['flickr'] = publish_flickr.upload(file_data)

    ## Wait before boosing to ensure media has been processed
    print("Waiting to ensure media has been uploaded and processed before boosting")
    time.sleep(20)


    if load_config.config['boost_mastodon']['enable']:
        print("Mastodon Boost enabled")
        import boost_mastodon
        posts['mastodon_boost'] = boost_mastodon.boost(posts['pixelfed'])

    if delete_mode:
        delete_files(files)
        
def list_files_in_directory(directory):
    top_level_items = os.listdir(directory)
    full_paths = [os.path.join(directory, item) for item in top_level_items]
    return full_paths

def delete_files(files):
    for file_path in files:
        try:
            os.remove(file_path)
            print(f"Deleted: {file_path}")
        except Exception as e:
            print(f"Error deleting {file_path}: {e}", file=sys.stderr)

if __name__ == "__main__":
    main()