Need Help how to refactor this code with Elixir to be more readable and to avoid nested cases

     def update(  %{
          full_name: full_name,
          password: password,
          password_confirmation: password_confirmation,
          email: email,
          language: language,
          time_zone: time_zone
        },
        %{context: %{user: %{uid: user_id}}}
      ) do
    user = User |> Repo.get(user_id)

    verif_email = user.email === email

    case verif_email do
      
      true ->
           case AccountClient.account_update(
               user_id,
               full_name,
               password,
               email,
               language,
               time_zone,
               password_confirmation
             ) do
          {
            :ok,
            %{
              data: %{
                attributes: %{
                  full_name: full_name,
                  email: email
                },
                id: uid
              }
            }
          } ->
            {:ok, User.update!(uid, email, full_name)}

          err ->
            err
        end


      false ->
     
        with false <- User.check_email(email),
             {
               :ok,
               %{
                 data: %{
                   attributes: %{
                     full_name: full_name,
                     email: email
                   },
                   id: uid
                 }
               }
             } <-
               AccountClient.account_update(
                 user_id,
                 full_name,
                 password,
                 email,
                 language,
                 time_zone,
                 password_confirmation
               ) do
          {:ok, User.update!(uid, email, full_name)}
        else

          true ->
            {:error, %{message: "Email has been already taken .."}}

         
          err ->
            err
        end
    end
  end