# management/commands/seed_modules.py
from django.core.management.base import BaseCommand
from account.models import Module

class Command(BaseCommand):
    def handle(self, *args, **kwargs):
        module_names = [
            #TODO:admin
            #dashboard
            'dashboard_admin','dq_admin','other_admin',
            #member
            'create_member_admin','read_member_admin','update_member_admin','delete_member_admin','reset_password_member_admin','deactivate_member_admin','read_member_profile_admin','update_member_profile_admin',
            #battalion & company
            'create_battalion_admin','read_battalion_admin','update_battalion_admin','delete_battalion_admin',
            'create_company_admin','read_company_admin','update_company_admin','delete_company_admin',
            #user
            'create_user_admin','read_user_admin','update_user_admin','delete_user_admin','reset_password_user_admin',
            
            
            #absent details
            #leave
            'create_main_leave_admin','read_main_leave_admin','update_main_leave_admin',
            #course_cdr_trg
            'create_course_cdr_trg_admin','read_course_cdr_trg_admin','update_course_cdr_trg_admin',
            #unauth_absent
            'create_unauth_absent_admin','read_unauth_absent_admin','remove_unauth_absent_admin',
            #other_reason
            'create_other_reason_admin','read_other_reason_admin','remove_other_reason_admin',
            #out_of_unit_emp
            'create_out_of_unit_emp_admin','read_out_of_unit_emp_admin','remove_out_of_unit_emp_admin',
            #ops_depl
            'create_ops_depl_admin','read_ops_depl_admin','remove_ops_depl_admin',
            
            #XXX: Performance
            #punishment
            'create_punishment_admin','read_punishment_admin','delete_punishment_admin',
            #promotion
            'create_promotion_admin','read_promotion_admin','delete_promotion_admin',
            #demotion
            'create_demotion_admin','read_demotion_admin','delete_demotion_admin',
            # PET
            'create_pet_admin', 'read_pet_admin', 'delete_pet_admin',
            # RET
            'create_ret_admin', 'read_ret_admin', 'delete_ret_admin',
            # Group Firing
            'create_gr_firing_admin', 'read_gr_firing_admin', 'delete_gr_firing_admin',
            # SM
            'create_sm_admin', 'read_sm_admin', 'delete_sm_admin',
            # Ex Performance
            'create_ex_perf_admin', 'read_ex_perf_admin', 'delete_ex_perf_admin',
            # observation
            'create_observation_admin', 'read_observation_admin', 'delete_observation_admin',
            # deserter
            'create_deserter_admin', 'read_deserter_admin', 'delete_deserter_admin',
            # reward
            'create_reward_admin', 'read_reward_admin', 'delete_reward_admin',
            # aslt_course
            'create_aslt_course_admin', 'read_aslt_course_admin', 'delete_aslt_course_admin',
            # fd_firing
            'create_fd_firing_admin', 'read_fd_firing_admin', 'delete_fd_firing_admin',
            # course_shooting
            'create_course_shooting_admin', 'read_course_shooting_admin', 'delete_course_shooting_admin',
            
            # Master Report
            'master_report_admin',

            # apr
            'create_apr_admin', 'read_apr_admin', 'delete_apr_admin',

            # list
            'create_list_admin', 'read_list_admin', 'delete_list_admin',
            
            #TODO: report
            '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',

            #XXX:notice
            'create_notice_admin', 'read_notice_admin',
            
            
            
            
            
            #TODO:battalion
            'dashboard_battalion','daily_battalion','adjutant_battalion',
            'read_company_battalion','other_battalion',
            #member
            'create_member_battalion','read_member_battalion','update_member_battalion','delete_member_battalion','reset_password_member_battalion','deactivate_member_battalion',
            'read_member_profile_battalion','update_member_profile_battalion',

            #XXX: report
            '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',

            #XXX:notice
            'create_notice_battalion', 'read_notice_battalion',
            
            #absent details
            #leave
            'create_main_leave_battalion','read_main_leave_battalion','update_main_leave_battalion',
            #course_cdr_trg
            'create_course_cdr_trg_battalion','read_course_cdr_trg_battalion','update_course_cdr_trg_battalion',
            #unauth_absent
            'create_unauth_absent_battalion','read_unauth_absent_battalion','remove_unauth_absent_battalion',
            #other_reason
            'create_other_reason_battalion','read_other_reason_battalion','remove_other_reason_battalion',
            #out_of_unit_emp
            'create_out_of_unit_emp_battalion','read_out_of_unit_emp_battalion','remove_out_of_unit_emp_battalion',
            #ops_depl
            'create_ops_depl_battalion','read_ops_depl_battalion','remove_ops_depl_battalion',
            
            #XXX: Performance
            #punishment
            'create_punishment_battalion','read_punishment_battalion','delete_punishment_battalion',
            #promotion
            'create_promotion_battalion','read_promotion_battalion','delete_promotion_battalion',
            #demotion
            'create_demotion_battalion','read_demotion_battalion','delete_demotion_battalion',
            # PET
            'create_pet_battalion', 'read_pet_battalion', 'delete_pet_battalion',
            # RET
            'create_ret_battalion', 'read_ret_battalion', 'delete_ret_battalion',
            # Group Firing
            'create_gr_firing_battalion', 'read_gr_firing_battalion', 'delete_gr_firing_battalion',
            # SM
            'create_sm_battalion', 'read_sm_battalion', 'delete_sm_battalion',
            # Ex Performance
            'create_ex_perf_battalion', 'read_ex_perf_battalion', 'delete_ex_perf_battalion',
            # observation
            'create_observation_battalion', 'read_observation_battalion', 'delete_observation_battalion',
            # deserter
            'create_deserter_battalion', 'read_deserter_battalion', 'delete_deserter_battalion',
            # reward
            'create_reward_battalion', 'read_reward_battalion', 'delete_reward_battalion',
            # aslt_course
            'create_aslt_course_battalion', 'read_aslt_course_battalion', 'delete_aslt_course_battalion',
            # fd_firing
            'create_fd_firing_battalion', 'read_fd_firing_battalion', 'delete_fd_firing_battalion',
            # course_shooting
            'create_course_shooting_battalion', 'read_course_shooting_battalion', 'delete_course_shooting_battalion',
            # Master Report
            'master_report_battalion',

            # apr
            'create_apr_battalion', 'read_apr_battalion', 'delete_apr_battalion',
            # list
            'create_list_battalion', 'read_list_battalion', 'delete_list_battalion',

            #XXX: battalion
            #transcoy
            'create_trans_coy_battalion','read_trans_coy_battalion',
            #ere type two
            'create_ere_type_two_battalion','read_ere_type_two_battalion','remove_ere_type_two_battalion',
            
            #TODO:company
            'dashboard_company','make_parade_state_company','other_company','cc_company','csm_company',
            #member
            'create_member_company','read_member_company','update_member_company','delete_member_company','reset_password_member_company','deactivate_member_company','read_member_profile_company','update_member_profile_company',

            #XXX:absent details
            #leave
            'create_main_leave_company','read_main_leave_company','update_main_leave_company',
            #course_cdr_trg
            'create_course_cdr_trg_company','read_course_cdr_trg_company','update_course_cdr_trg_company',
            #unauth_absent
            'create_unauth_absent_company','read_unauth_absent_company','remove_unauth_absent_company',
            #other_reason
            'create_other_reason_company','read_other_reason_company','remove_other_reason_company',
            #out_of_unit_emp
            'create_out_of_unit_emp_company','read_out_of_unit_emp_company','remove_out_of_unit_emp_company',
            #ops_depl
            'create_ops_depl_company','read_ops_depl_company','remove_ops_depl_company',
            
            #XXX: Performance
            #punishment
            'create_punishment_company','read_punishment_company','delete_punishment_company',
            #promotion
            'create_promotion_company','read_promotion_company','delete_promotion_company',
            #demotion
            'create_demotion_company','read_demotion_company','delete_demotion_company',
            # PET 
            'create_pet_company', 'read_pet_company', 'delete_pet_company',
            # RET 
            'create_ret_company', 'read_ret_company', 'delete_ret_company',
            # Group Firing 
            'create_gr_firing_company', 'read_gr_firing_company', 'delete_gr_firing_company',
            # SM 
            'create_sm_company', 'read_sm_company', 'delete_sm_company',
            # Ex Performance
            'create_ex_perf_company', 'read_ex_perf_company', 'delete_ex_perf_company',
            # observation
            'create_observation_company', 'read_observation_company', 'delete_observation_company',
            # deserter
            'create_deserter_company', 'read_deserter_company', 'delete_deserter_company',
            # reward
            'create_reward_company', 'read_reward_company', 'delete_reward_company',
            # aslt_course
            'create_aslt_course_company', 'read_aslt_course_company', 'delete_aslt_course_company',
            # fd_firing
            'create_fd_firing_company', 'read_fd_firing_company', 'delete_fd_firing_company',
            # course_shooting
            'create_course_shooting_company', 'read_course_shooting_company', 'delete_course_shooting_company',

            # Master Report
            'master_report_company',
            # apr
            'create_apr_company', 'read_apr_company', 'delete_apr_company',

            # list
            'create_list_company', 'read_list_company', 'delete_list_company',
            
            #XXX: report
            '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',
            
            #XXX:notice
            'create_notice_company', 'read_notice_company',


            #TODO: member
            'dashboard_member','leave_apply_member','read_member_profile_member','update_member_profile_member',
            
            
            #TODO: other
            
            
            
            #TODO:setting
            #memberType
            'read_member_type_setting','read_leave_type_setting',
            # member status
            'create_member_status_setting', 'read_member_status_setting', 'update_member_status_setting', 'delete_member_status_setting',
            #rank
            'create_rank_setting','read_rank_setting','update_rank_setting','delete_rank_setting',
            # appointment
            'create_appointment_setting', 'read_appointment_setting', 'update_appointment_setting', 'delete_appointment_setting',
            # trade
            'create_trade_setting', 'read_trade_setting', 'update_trade_setting', 'delete_trade_setting',
            # core
            'create_core_setting', 'read_core_setting', 'update_core_setting', 'delete_core_setting',
            # special quality
            'create_special_quality_setting', 'read_special_quality_setting', 'update_special_quality_setting', 'delete_special_quality_setting',
            # punishment type
            'create_punishment_type_setting', 'read_punishment_type_setting', 'update_punishment_type_setting', 'delete_punishment_type_setting',
            # punishment_name
            'create_punishment_name_setting', 'read_punishment_name_setting', 'update_punishment_name_setting', 'delete_punishment_name_setting',
            # promotion type
            'create_promotion_type_setting', 'read_promotion_type_setting', 'update_promotion_type_setting', 'delete_promotion_type_setting',
            # demotion_type
            'create_demotion_type_setting', 'read_demotion_type_setting', 'update_demotion_type_setting', 'delete_demotion_type_setting',
            # leave reason
            'create_leave_reason_setting', 'read_leave_reason_setting', 'update_leave_reason_setting', 'delete_leave_reason_setting',
            # leave reason des
            'create_leave_reason_des_setting', 'read_leave_reason_des_setting', 'update_leave_reason_des_setting', 'delete_leave_reason_des_setting',
            # course name
            'create_course_name_setting', 'read_course_name_setting', 'update_course_name_setting', 'delete_course_name_setting',
            # course institution
            'create_course_institution_setting', 'read_course_institution_setting', 'update_course_institution_setting', 'delete_course_institution_setting',
            # ops deployment location
            'create_ops_depl_location_setting','read_ops_depl_location_setting' ,'update_ops_depl_location_setting', 'delete_ops_depl_location_setting',
            # district
            'create_district_setting', 'read_district_setting', 'update_district_setting', 'delete_district_setting',
            # upazila
            'create_upazila_setting', 'read_upazila_setting', 'update_upazila_setting', 'delete_upazila_setting',
            # ex_perf_name
            'create_ex_perf_name_setting', 'read_ex_perf_name_setting', 'update_ex_perf_name_setting', 'delete_ex_perf_name_setting',
            # range
            'create_range_setting', 'read_range_setting', 'update_range_setting', 'delete_range_setting',
            # batch
            'create_batch_setting', 'read_batch_setting', 'update_batch_setting', 'delete_batch_setting',
            # list_category
            'create_list_category_setting', 'read_list_category_setting', 'update_list_category_setting', 'delete_list_category_setting',
            #other
            'change_password','info',
            
            
            
        ]
        Module.objects.exclude(name__in=module_names).delete()
        for name in module_names:
            Module.objects.get_or_create(name=name)
        self.stdout.write(self.style.SUCCESS("Modules created."))
