In Account Sobject i have added two check-box's 1.Administrative Office and 2.Data Center

when user enter name and check anyone of it then Account Name is like Sam (A)/(D).

which i did with trigger using before insert event, Thats fine. Now when client edit the Account and change the checkbox it should update the Name again like Sam (D)/(A) according. But not updating with this code

here is my Trigger code for reference  

    trigger accName on Account (before insert, before update) {
        List<Account> acc;

        if (Trigger.isBefore) {
            if (Trigger.isInsert) {
                for(Account a:Trigger.New) {
                    if(a.Administrative_Office__c == True) {
                        a.Name = a.Name + ' ( A ) ' ;
                    }
                    else if(a.Data_Center__c == True) {
                        a.Name = a.Name + ' ( D ) ' ;
                    }
            else {
                if (Trigger.isUpdate) {
                    List<Account> accn = new List<Account>();
                    accn = [SELECT Id, Name 
                            FROM Account 
                            WHERE Id IN: Trigger.oldMap.keySet() 
                            LIMIT 1];

                   for (Account au : accn) {
                       if(au.Administrative_Office__c == True) {
                           au.Name = au.Name + ' ( A ) ' ;
                       }
                       else if(au.Data_Center__c == True) {
                           au.Name = au.Name + ' ( D ) ' ;
                           //   au.Name = au.Name;
                       }
                       update accn;   
                   } 
                }
            }
            insert a;   
            } 
          }
       }
    }