#!/usr/bin/env bash
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the terms described in the LICENSE file in
# the root directory of this source tree.
#
# Check for missing __init__.py files in Python packages
# This script finds directories that contain Python files but are missing __init__.py

set -euo pipefail

# Use mapfile to get a faster way to iterate over directories
if (( BASH_VERSINFO[0] < 4 )); then
    echo "This script requires Bash 4.0 or higher for mapfile support."
    exit 1
fi

PACKAGE_DIR="${1:-llama_stack}"

if [ ! -d "$PACKAGE_DIR" ]; then
    echo "ERROR: Package directory '$PACKAGE_DIR' does not exist"
    exit 1
fi

# Get all directories with Python files (excluding __init__.py)
mapfile -t py_dirs < <(
    find "$PACKAGE_DIR" \
        -type f \
        -name "*.py" ! -name "__init__.py" \
        ! -path "*/.venv/*" \
        ! -path "*/node_modules/*" \
        -exec dirname {} \; | sort -u
)

missing_init_files=0

for dir in "${py_dirs[@]}"; do
    if [ ! -f "$dir/__init__.py" ]; then
        echo "ERROR: Missing __init__.py in directory: $dir"
        echo "This directory contains Python files but no __init__.py, which may cause packaging issues."
        missing_init_files=1
    fi
done

exit $missing_init_files
