How to replace on a selected gameobject all materials with one material (Highlite)

I have multiple gameobjects / meshes in my scene with two or more materials on it.

The goal is when i select a gameobject with a pointer I want to change all the materials that are on the selected gameobject to one certain material. And when pressing the button again while aiming on the same GO it has to set the materials back as they where.

I get a reference to the meshrenderer by using a OnPointerDown event and change all the materials to one material, its partially working, i can select the gameobject and change the material but i cant change it back.

Here is my code;

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System.Collections.Generic;
 
public class DataTransfer : MonoBehaviour, IPointerDownHandler
{
 
     public GameObject selectedObject;
     public Material selectMat;
     private Material originalMat;
 
     private Material[] mats;
     private Material[] sharedMaterials;
 
 
 
     public void OnPointerDown(PointerEventData eventData)
     {
 
         selectedObject = eventData.pointerCurrentRaycast.gameObject;
         mats = selectedObject.GetComponent<Renderer>().materials;
         Debug.Log(selectedObject.name + "  Has " + mats.Length + " materials in the mesh renderer");
 
    
         ChangeMaterial();
         //HighLiteGo();
 
 
     }
 
 
     public void ChangeMaterial()
     {
         if (sharedMaterials == null)
         {
             sharedMaterials = (Material[])selectedObject.gameObject.GetComponent<Renderer>().materials.Clone();
 
             for (int i = 0; i < sharedMaterials.Length; i++)
             {
                 sharedMaterials[i] = new Material(selectMat);
 
             }
 
             selectedObject.gameObject.GetComponent<Renderer>().materials = sharedMaterials;
 
             SelectObject(selectedObject);
         }
 
         else
         {
             ClearSelection();
 
         }
 
     }
 
 
     void SelectObject(GameObject obj)
     {
         if (selectedObject != null)
         {
             if (obj == selectedObject)
             {
                 return;
             }
 
             ClearSelection();
         }
 
         selectedObject = obj;
 
 
     }
 
     void ClearSelection()
     {
         if (selectedObject == null)
         {
             return;
         }
         else
         {
          
             selectedObject.GetComponent<Renderer>().materials = mats;
             originalMat = null;
             selectedObject = null;
         }
     }
}
private static readonly List<MeshRenderer> RenderersBuffer = new List<MeshRenderer>();

private void UpdateChildRenderers(Material m) {
    RenderersBuffer.Clear();
    GetComponentsInChildren(RenderersBuffer, true);
    foreach(var renderer in RenderersBuffer) renderer.sharedMaterial = m;
}