How to make the main camera rotate with the player's directions?

I have the following script attached to the main camera which should make it follow and rotate with the player’s movements.

public class FollowPlayer : MonoBehaviour
{
    [SerializeField]
    float mouseSensitivity;
    public Vector3 cameraOffset;

    public Transform Player;
    public Transform mainCamera;

    void Start()
    {
        Cursor.lockState = CursorLockMode.Locked;
        cameraOffset = transform.position - Player.transform.position;
    }
    void Update()
    {
        Rotate();
    }

    private void Rotate()
    {
        float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
        Player.Rotate(Vector3.up, mouseX);

        mainCamera.Rotate(Vector3.up, mouseX); //shows abnormal rotation (hides the player as well)
    }

    private void LateUpdate()
    {
        Vector3 newPosition = Player.position + cameraOffset;
        transform.position = newPosition;
    }
}

The camera follows the player, however, but it does not rotate with the player’s rotations. Please note that making the main camera the child of the player is not an option here, since I have to use this script on multiplayer. I want the mouse to be able to rotate both the main camera and the player at the same time.

#if ENABLE_INPUT_SYSTEM
using UnityEngine.InputSystem;
#endif

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FollowPlayer : MonoBehaviour
{
    public float mouseSensitivity = 100f;

    public Transform playerBody;

    float xRotation = 0f;

    // Start is called before the first frame update
    void Start()
    {
        Cursor.lockState = CursorLockMode.Locked;
    }

    // Update is called once per frame
    void Update()
    {
#if ENABLE_INPUT_SYSTEM
        float mouseX = 0, mouseY = 0;

        if (Mouse.current != null)
        {
            var delta = Mouse.current.delta.ReadValue() / 15.0f;
            mouseX += delta.x;
            mouseY += delta.y;
        }
        if (Gamepad.current != null)
        {
            var value = Gamepad.current.rightStick.ReadValue() * 2;
            mouseX += value.x;
            mouseY += value.y;
        }

        mouseX *= mouseSensitivity * Time.deltaTime;
        mouseY *= mouseSensitivity * Time.deltaTime;
#else
        float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
        float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;
#endif

        xRotation -= mouseY;
        xRotation = Mathf.Clamp(xRotation, -90f, 90f);

        transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);

        playerBody.Rotate(Vector3.up * mouseX);
    }
}