@page "/take/self"
@code {
    @inject IChannelListDao channelListDao;
    @inject IDrugInfoDao drugInfoDao;
    @inject NotificationService _message
    @inject DialogService dialogService;
    RadzenDataGrid grid;
    List orderDetails = new();
    List drugInfos = new();
    List detailsToInsert = new();
    List detailsToUpdate = new();
    OrderInfo orderInfo = new OrderInfo()
        {
            OrderDate = DateTime.Now
        };
    void Reset()
    {
        detailsToInsert.Clear();
        detailsToUpdate.Clear();
    }
    void Reset(OrderDetail orderDetail)
    {
        detailsToInsert.Remove(orderDetail);
        detailsToUpdate.Remove(orderDetail);
    }
    async Task InsertRow()
    {
        Reset();
        var orderDetail = new OrderDetail();
        detailsToInsert.Add(orderDetail);
        await grid.InsertRow(orderDetail);
    }
    async Task EditRow(OrderDetail orderDetail)
    {
        Reset();
        detailsToUpdate.Add(orderDetail);
        await grid.EditRow(orderDetail);
    }
    async Task SaveRow(OrderDetail orderDetail)
    {
        await grid.UpdateRow(orderDetail);
    }
    void CancelEdit(OrderDetail orderDetail)
    {
        Reset(orderDetail);
        grid.CancelEditRow(orderDetail);
        grid.Reload();
    }
    async Task DeleteRow(OrderDetail orderDetail)
    {
        Reset(orderDetail);
        orderDetails.Remove(orderDetail);
        grid.CancelEditRow(orderDetail);
        await grid.Reload();
    }
    void OnUpdateRow(OrderDetail orderDetail)
    {
        Reset(orderDetail);
        grid.Reload();
    }
    void OnCreateRow(OrderDetail orderDetail)
    {
        // 数据库添加用户
        detailsToInsert.Remove(orderDetail);
        orderDetails.Add(orderDetail);
        grid.Reload();
    }
    async void Submit(OrderInfo orderInfo)
    {
        if (orderDetails.Count == 0)
        {
            _message.Notify(
                new NotificationMessage { Severity = NotificationSeverity.Error, Summary = "提示", Detail = $"请添加用药详情", Duration = 3000 }
            );
        }
        else
        {
            //弹出待取药品所在库位、库存信息
            var b = await dialogService.OpenAsync(
                $"取药详情",
              new Dictionary() { { "order", orderInfo }, { "orderDetails", orderDetails } },
              new DialogOptions() { Width = "85vw", Resizable = true, Draggable = true, ShowClose = false }
            );
            if (b)
            {
                _message.Notify(
                new NotificationMessage { Severity = NotificationSeverity.Success, Summary = "提示", Detail = $"取药完成", Duration = 3000 }
            );
            }
        }
    }
    async Task reloadGrid()
    {
        await grid.Reload();
    }
    bool ValidateDrug(DrugInfo drugInfo)
    {
        return !orderDetails.Any(od => od.Drug.DrugId.Equals(drugInfo?.DrugId));
    }
    protected override async Task OnInitializedAsync()
    {
        drugInfos = await drugInfoDao.GetAllDrugAndStock();
        base.OnInitializedAsync();
    }
    void OnCurrentDateChanged(DateTime args)
    {
        orderInfo.OrderDate = new DateTime(args.Year, args.Month, args.Day, args.Hour, args.Minute, args.Second);
    }
}