from rolepermissions.roles import AbstractUserRole

UserRoles = ["super_admin", "manager", "employee", "customer", "authenticated_user","allow_any"]
class SuperAdminRole(AbstractUserRole):
    available_permissions = {
        'view_statuslog': True,
        'delete_statuslog': True,
        'delete_grant': True,
        'add_grant': True,
        'change_grant': True,
        'view_grant': True,
        'add_socialtoken': True,
        'delete_socialtoken': True,
        'change_socialtoken': True,
        'view_socialtoken': True,
        'add_userobjectpermission': True,
        'delete_userobjectpermission': True,
        'change_userobjectpermission': True,
        'view_userobjectpermission': True,
        'add_groupobjectpermission': True,
        'delete_groupobjectpermission': True,
        'change_groupobjectpermission': True,
        'view_groupobjectpermission': True,
        'delete_application': True,
        'add_application': True,
        'change_application': True,
        'view_application': True,
        'delete_token': True,
        'delete_emailaddress': True,
        'delete_emailconfirmation': True,
        'delete_logentry': True,
        'change_logentry': True,
        'view_logentry': True,
        'add_logentry': True,
        'delete_contenttype': True,
        'change_contenttype': True,
        'add_contenttype': True,
        'delete_refreshtoken': True,
        'change_refreshtoken': True,
        'view_refreshtoken': True,
        'add_refreshtoken': True,
        'delete_accesstoken': True,
        'change_accesstoken': True,
        'view_accesstoken': True,
        'add_accesstoken': True,
        'delete_socialaccount': True,
        'delete_site': True,
        'add_site': True,
        'delete_permission': True,
        'add_permission': True,
        'change_permission': True,
        'delete_socialapp': True,
        'change_socialapp': True,
        'view_socialapp': True,
        'add_socialapp': True,
        'delete_group': True,
        'change_group': True,
        'add_group': True,
        'add_corsmodel': True
    }


class ManagerRole(AbstractUserRole):
    available_permissions = {
        'delete_historicalfile': True,
        'delete_usermodel': True,
        'delete_savingsplan': True,
        'delete_withdrawalscheme': True,
        'change_withdrawalscheme': True,
        'add_withdrawalscheme': True,
        'delete_reportscheme': True,
        'change_reportscheme': True,
        'add_reportscheme': True,
        'delete_interestscheme': True,
        'change_interestscheme': True,
        'add_interestscheme': True,
        'delete_savingsscheme': True,
        'change_savingsscheme': True,
        'add_savingsscheme': True,
        'add_employee': True,
        'delete_employee': True,
        'delete_address': True,
        'delete_daccount': True,
        'delete_historicalagreement': True,
        'delete_historicalreportscheme': True,
        'delete_historicalsavingsscheme': True,
        'delete_historicalwithdrawalscheme': True,
        'delete_historicalrewardscheme': True,
        'delete_historicalinterestscheme': True,
        'delete_historicalaim': True,
        'delete_historicaldebit': True,
        'delete_historicaltransfer': True,
        'delete_historicalcredit': True,
        'delete_historicalbranch': True,
        'delete_historicalemployee': True,
        'delete_historicalcustomer': True,
        'delete_historicaladdress': True,
        'delete_historicaldaccount': True,
        'delete_historicaluserdocument': True,
        'delete_historicalusermodel': True,
        'delete_historicalfundsource': True,
        'delete_historicalsavingsplan': True,
        'delete_agreement': True,
        'delete_userdocument': True,
        'delete_branch': True,
        'change_branch': True,
        'delete_customer': True,
        'add_branch': True,
        'delete_historicaldtransaction': True,
        'delete_customer': True,
    }


class EmployeeRole(AbstractUserRole):
    available_permissions = {
                'add_historicalsavingsplan': True,
                'view_rewardscheme': True,
                'view_reportscheme': True,
                'view_interestscheme': True,
                'view_savingsscheme': True,
                'view_withdrawalscheme': True,
                'add_historicalsavingsscheme': True,
                'view_historicalsavingsscheme': True,
                'change_savingsplan': True,
                'add_savingsplan': True,
                'add_historicaldaccount': True,
                'add_historicalaim': True,
                'add_historicalcustomer': True,
                'add_historicalemployee': True,
                'add_historicalwithdrawalscheme': True,
                'view_historicalwithdrawalscheme': True,
                'add_historicalrewardscheme': True,
                'view_historicalrewardscheme': True,
                'delete_externalbank': True,
                'change_externalbank': True,
                'add_externalbank': True,
                'delete_fundsource': True,
                'change_fundsource': True,
                'add_fundsource': True,
                'add_historicalreportscheme': True,
                'view_historicalreportscheme': True,
                'change_employee': True,
                'view_employee': True,
                'change_daccount': True,
                'delete_credit': True,
                'change_credit': True,
                'change_customer': True,
                'delete_transfer': True,
                'change_transfer': True,
                'delete_debit': True,
                'change_debit': True,
                'delete_aim': True,
                'change_aim': True,
                'add_historicalfundsource': True,
                'add_historicalinterestscheme': True,
                'view_historicalinterestscheme': True,
    }


class CustomerRole(AbstractUserRole):
    available_permissions = {
        'add_debit': True,
        'view_debit': True,
        'add_credit': True,
        'view_credit': True,
        'add_transfer': True,
        'view_transfer': True,
        'change_externalbank': True,
        'add_externalbank': True,
        'change_dtransaction': True,
        'add_dtransaction': True,
        'view_dtransaction': True,
        'view_customer': True,
        'view_fundsource': True,
        'view_branch': True,
        'view_historicalcustomer': True,
        'view_historicalfundsource': True,
        'view_historicaldaccount': True,
        'view_historicalaim': True,
        'view_historicaldebit': True,
        'view_historicaltransfer': True,
        'view_historicalcredit': True,
        'add_historicaldebit': True,
        'add_historicaltransfer': True,
        'add_historicalcredit': True,
        'view_historicaldtransaction': True,
        'add_historicaldtransaction': True,
        'view_historicalsavingsplan': True,
    }


class AuthenticatedUser(AbstractUserRole):
    available_permissions = {
        'change_socialaccount': True,
        'add_socialaccount': True,
        'view_socialaccount': True,
        'add_historicalusermodel': True,
        'view_historicalusermodel': True,
        'add_historicaluserdocument': True,
        'view_historicaluserdocument': True,
        'change_address': True,
        'add_address': True,
        'view_address': True,
        'view_historicalfile': True,
        'add_historicalfile': True,
        'delete_file': True,
        'change_file': True,
        'add_file': True,
        'view_file': True,
        'change_emailconfirmation': True,
        'view_emailconfirmation': True,
        'add_emailconfirmation': True,
        'change_token': True,
        'view_token': True,
        'change_usermodel': True,
        'view_usermodel': True,
        'change_agreement': True,
        'view_historicalagreement': True,
        'add_historicaladdress': True,
        'view_historicaladdress': True,
        'change_userdocument': True,
        'add_userdocument': True,
        'view_userdocument': True,
        'view_contenttype': True,
        'view_permission': True,
        'view_group': True,
        'add_session': True,
        'view_session': True,
        'change_session': True,
        'delete_session': True,
        'view_usermodel': True,
        'change_usermodel': True,
        'delete_product': True,
        'change_product': True,
        'add_product': True,
        'view_product': True,
        'add_customer': True,
        'add_savingsplan': True,
        'add_daccount': True,
        'view_daccount': True,
        'view_savingsplan': True,
        'view_externalbank': True,
        'view_aim': True,
    }


class AllowAnyRole(AbstractUserRole):
    available_permissions = {
        'add_usermodel': True,
        'add_emailaddress': True,
        'add_agreement': True,
        'add_historicalagreement': True,
        'add_statuslog': True
    }