#!/usr/bin/env bash

# Source common functions for logging
SCRIPT_DIR=$(cd $(dirname ${BASH_SOURCE[0]});pwd)
source "${SCRIPT_DIR}/common.sh"

# Clippy lint configuration
CLIPPY_LINTS=(
    -A clippy::module_inception  \
    -A clippy::result_large_err \
    -A clippy::large_enum_variant \
    -A clippy::should_implement_trait \
    -A clippy::too_many_arguments \
    -A clippy::disallowed_names \
    -A clippy::redundant_closure \
    -A clippy::field_reassign_with_default \
    -A clippy::wrong_self_convention \
    -A clippy::needless_range_loop \
    -A clippy::inconsistent_struct_constructor \
    -A clippy::new_ret_no_self \
    -A clippy::unnecessary_sort_by \
    -A clippy::unnecessary_wraps \
    -A clippy::bool_assert_comparison \
    -A clippy::self_named_constructors \
    -A clippy::enum_variant_names \
    -A clippy::type_complexity \
    -A clippy::significant_drop_in_scrutinee \
    -A clippy::derive_partial_eq_without_eq \
    -W clippy::dbg_macro \
    -W clippy::todo \
    -D clippy::upper_case_acronyms \
    -D clippy::disallowed_methods \
    -D rust-2018-idioms \
    -D clippy::assertions_on_result_states \
    -A clippy::non_canonical_partial_ord_impl \
    -A clippy::arc_with_non_send_sync \
    -D clippy::redundant_async_block \
    -D clippy::unused_async \
    -D clippy::manual_async_fn \
    -D clippy::large_futures \
)

main() {
    log "Running clippy analysis..."
    
    cd "${PROJECT_ROOT}"
    
    # Run clippy with the configured lints
    if cargo clippy --workspace --no-default-features "$@" -- "${CLIPPY_LINTS[@]}"; then
        log "Clippy analysis completed successfully! ✓"
        exit 0
    else
        log_error "Clippy analysis found issues"
        exit 1
    fi
}

# Execute main function
main "$@"
