import os

# Define the content template
template = """
[{itemTitle}]
itemTitle={itemTitle}
itemAuthor=
itemSize={itemSize}
path=Hdd1:\\Content\\0000000000000000\\{second_subfolder}\\{third_subfolder}\\
{part_paths}
dataurl="Link"{itemTitle_encoded}/{second_subfolder}/{third_subfolder}/{file_name}
{dataurl_parts}
"""

def generate_dataurl_parts(base_path, itemTitle_encoded, second_subfolder, third_subfolder, next_subfolder):
    """
    Generate dataurlpart2, dataurlpart3, etc. based on the files in the next subfolder.
    """
    dataurl_parts = []
    part_paths = []
    base_url = "Link"
    
    # List all files in the next subfolder
    next_subfolder_path = os.path.join(base_path, next_subfolder)
    files = [f for f in os.listdir(next_subfolder_path) if os.path.isfile(os.path.join(next_subfolder_path, f))]

    # Add paths and dataurlparts
    for idx, file in enumerate(files, start=2):  # Start indexing at 2 for dataurlpart2
        file_name = file.replace('.data', '')
        part_paths.append(f"part{idx}path=Hdd1:\\Content\\0000000000000000\\{second_subfolder}\\{third_subfolder}\\{next_subfolder}\\")
        dataurl_parts.append(f"dataurlpart{idx}={base_url}{itemTitle_encoded}/{second_subfolder}/{third_subfolder}/{next_subfolder}/{file_name}")

    # Ensure dataurlpart2 is always included
    if not dataurl_parts:
        dataurl_parts.append("dataurlpart2=")  # Default entry if no files are found

    return dataurl_parts, part_paths

def format_item_size(item_size):
    """
    Format the item size in MB or GB.
    """
    item_size_mb = item_size / (1024 * 1024)  # Convert bytes to MB
    if item_size_mb >= 1024:
        item_size_gb = item_size_mb / 1024  # Convert MB to GB if >= 1024 MB
        return f"{item_size_gb:.2f}GB"
    else:
        return f"{item_size_mb:.0f}MB"

def create_ini_file(base_dir, output_file):
    ini_data = {}

    # Iterate over the first-level folders inside the base_dir
    for first_subfolder in os.listdir(base_dir):
        first_subfolder_path = os.path.join(base_dir, first_subfolder)
        if os.path.isdir(first_subfolder_path):
            # Iterate over the second-level folders
            for second_subfolder in os.listdir(first_subfolder_path):
                second_subfolder_path = os.path.join(first_subfolder_path, second_subfolder)
                if os.path.isdir(second_subfolder_path):
                    # Iterate over the third-level folders
                    for third_subfolder in os.listdir(second_subfolder_path):
                        third_subfolder_path = os.path.join(second_subfolder_path, third_subfolder)
                        if os.path.isdir(third_subfolder_path):
                            next_subfolder = None

                            # Check if there's a next-level folder
                            for next_subfolder_candidate in os.listdir(third_subfolder_path):
                                next_subfolder_path = os.path.join(third_subfolder_path, next_subfolder_candidate)
                                if os.path.isdir(next_subfolder_path):
                                    next_subfolder = next_subfolder_candidate
                                    break

                            item_size = 0
                            dataurl_parts, part_paths = generate_dataurl_parts(third_subfolder_path, first_subfolder.replace(' ', '%20'), second_subfolder.replace(' ', '%20'), third_subfolder.replace(' ', '%20'), next_subfolder)

                            # Calculate total item size
                            for root, _, files in os.walk(third_subfolder_path):
                                for file in files:
                                    file_path = os.path.join(root, file)
                                    item_size += os.path.getsize(file_path)

                            item_size_str = format_item_size(item_size)

                            # Format itemTitle for URL encoding
                            itemTitle_encoded = first_subfolder.replace(' ', '%20')

                            # Find the first file to use its name in dataurl
                            file_name = ''
                            for file in os.listdir(third_subfolder_path):
                                if file.endswith('.data'):
                                    file_name = file.replace('.data', '')
                                    break

                            # Generate INI entry
                            ini_entry = template.format(
                                itemTitle=first_subfolder,  # Keep itemTitle with spaces
                                itemTitle_encoded=itemTitle_encoded,  # Encoded itemTitle for URL
                                second_subfolder=second_subfolder.replace(' ', '%20'),
                                third_subfolder=third_subfolder.replace(' ', '%20'),
                                next_subfolder=next_subfolder if next_subfolder else '',
                                itemSize=item_size_str,  # Use formatted size (MB/GB)
                                file_name=file_name,  # Add the file name without .data for URL
                                dataurl_parts='\n'.join(dataurl_parts),  # Add dataurlparts
                                part_paths='\n'.join(part_paths)  # Add part paths
                            )

                            section_name = first_subfolder
                            ini_data[section_name] = ini_entry

    # Write to the INI file
    with open(output_file, 'w', encoding='utf-8') as ini_file:
        for section_name, entry in ini_data.items():
            ini_file.write(f"{entry}\n")

    print(f"Created {output_file}")

# Run the function
if __name__ == "__main__":
    base_directory = r"/mnt/block/ws/"  # Change this to the actual path
    output_file = os.path.join(base_directory, "all_configs.ini")
    create_ini_file(base_directory, output_file)
