# context_processors.py

from .models import RoleModuleAccess

def role_modules(request):
    if request.user.is_authenticated:
        role = getattr(request.user, 'role', None)
        if role is not None:
            modules = role.modules.all()
        else:
            modules = []
    else:
        modules = []

    module_names = [module.name for module in modules]
    
    
    # Define module categories
    unit_sub_unit_modules = {'read_battalion_admin','read_company_admin','read_company_battalion'}
    setting_module = {'read_district_setting','read_course_name_setting','read_leave_reason_setting','read_rank_setting','read_upazila_setting','read_appointment_setting','read_special_quality_setting','read_leave_type_setting','read_promotion_type_setting','read_member_type_setting','read_course_institution_setting','read_core_setting', 'read_punishment_type_setting','read_trade_setting','read_ops_depl_location_setting', 'read_batch_setting'}
    member_module = {'read_member_admin','read_member_battalion','read_member_company'}
    report_module = {
        'report_blood_admin', 'report_med_cat_admin', 'report_age_admin', 'report_absent_admin', 'report_address_admin', 'report_height_admin', 'report_join_date_admin', 'report_retirement_date_admin',
        'report_blood_battalion', 'report_med_cat_battalion', 'report_age_battalion', 'report_absent_battalion', 'report_address_battalion', 'report_height_battalion', 'report_join_date_battalion', 'report_retirement_date_battalion',
        'report_blood_company', 'report_med_cat_company', 'report_age_company', 'report_absent_company', 'report_address_company', 'report_height_company', 'report_join_date_company', 'report_retirement_date_company'
    }
    absent_details_module = {
        'read_main_leave_admin','read_course_cdr_trg_admin','read_out_of_unit_emp_admin','read_unauth_absent_admin','read_other_reason_admin','read_ops_depl_admin',
        'read_main_leave_battalion','read_course_cdr_trg_battalion','read_out_of_unit_emp_battalion','read_unauth_absent_battalion','read_other_reason_battalion','read_ops_depl_battalion',
        'read_main_leave_company','read_course_cdr_trg_company','read_out_of_unit_emp_company','read_unauth_absent_company','read_other_reason_company','read_ops_depl_company',
    }
    performance_module = {
        'read_promotion_admin', 'read_promotion_battalion', 'read_promotion_company',
        'read_punishment_admin', 'read_punishment_battalion', 'read_punishment_company',
        'read_pet_admin', 'read_pet_battalion', 'read_pet_company',
        'read_ret_admin', 'read_ret_battalion', 'read_ret_company',
        'read_gr_firing_admin', 'read_gr_firing_battalion', 'read_gr_firing_company',
        'read_sm_admin', 'read_sm_battalion', 'read_sm_company',
        'read_observation_admin', 'read_observation_battalion', 'read_observation_company',
        'read_deserter_admin', 'read_deserter_battalion', 'read_deserter_company',
        'read_reward_admin', 'read_reward_battalion', 'read_reward_company',
        'read_aslt_course_admin', 'read_aslt_course_battalion', 'read_aslt_course_company',
        'read_fd_firing_admin', 'read_fd_firing_battalion', 'read_fd_firing_company',
        'read_course_shooting_admin', 'read_course_shooting_battalion', 'read_course_shooting_company',
        'read_apr_admin', 'read_apr_battalion', 'read_apr_company',
        'master_report_admin', 'master_report_battalion', 'master_report_company'

    }
    multiple_module = {
        'create_pet_admin', 'create_pet_battalion', 'create_pet_company',
        'create_ret_admin', 'create_ret_battalion', 'create_ret_company',
        'create_gr_firing_admin', 'create_gr_firing_battalion', 'create_gr_firing_company',
        'create_sm_admin', 'create_sm_battalion', 'create_sm_company',
        'create_aslt_course_admin', 'create_aslt_course_battalion', 'create_aslt_course_company',
        'create_fd_firing_admin', 'create_fd_firing_battalion', 'create_fd_firing_company',
        'create_course_shooting_admin', 'create_course_shooting_battalion', 'create_course_shooting_company',
    }
    return {
        "module_names": module_names,
        'user_modules': modules,
        'has_setting_modules': any(module.name in setting_module for module in modules),
        'has_unit_sub_unit_modules': any(module.name in unit_sub_unit_modules for module in modules),
        'has_member_modules': any(module.name in member_module for module in modules),
        'has_report_modules': any(module.name in report_module for module in modules),
        'has_absent_details_modules': any(module.name in absent_details_module for module in modules),
        'has_performance_modules': any(module.name in performance_module for module in modules),
        'has_multiple_modules': any(module.name in multiple_module for module in modules),
    }