using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.DynamicProxy;

namespace JiShe.CollectBus.Interceptors
{
    public class LogInterceptor : AbpInterceptor, ITransientDependency
    {
        public override async Task InterceptAsync(IAbpMethodInvocation invocation)
        {
            // 方法执行前的逻辑（如果需要）

            try
            {
                // 执行原始方法
                await invocation.ProceedAsync();

                // 方法执行成功后，返回前的逻辑
                await OnSuccessAsync(invocation);
            }
            catch (Exception ex)
            {
                // 出现异常时的逻辑
                await OnExceptionAsync(invocation, ex);
                throw;
            }
            finally
            {
                // 方法结束前一定会执行的逻辑
                await OnCompleteAsync(invocation);
            }
        }

        private Task OnSuccessAsync(IAbpMethodInvocation invocation)
        {
            // 方法执行成功后的逻辑
            // 可以访问 invocation.ReturnValue 获取返回值
            Console.WriteLine($"方法 {invocation.Method.Name} 成功执行，返回值：{invocation.ReturnValue}");
            return Task.CompletedTask;
        }

        private Task OnExceptionAsync(IAbpMethodInvocation invocation, Exception ex)
        {
            // 方法执行异常时的逻辑
            Console.WriteLine($"方法 {invocation.Method.Name} 执行异常：{ex.Message}");
            return Task.CompletedTask;
        }

        private Task OnCompleteAsync(IAbpMethodInvocation invocation)
        {
            // 无论成功失败，方法执行完毕后的逻辑
            Console.WriteLine($"方法 {invocation.Method.Name} 执行完毕");
            return Task.CompletedTask;
        }
    }
}
