<?php

namespace App\Admin\Controllers;

use App\Models\Merchant;
use App\Models\OrderDivideRecord;
use App\Models\User;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
use App\Admin\Actions\TransferToPlatForm;
use App\Models\StoreAdminUsers;

class OrderDivideRecordController extends AdminController
{
    /**
     * Make a grid builder.
     *
     * @return Grid
     */
    protected function grid()
    {
        return Grid::make(OrderDivideRecord::with(['order', 'users']), function (Grid $grid) {
            $grid->model()->orderBy('id', 'DESC');
            $grid->column('id')->sortable();
            $grid->column('order.order_sn', '订单号');
            $grid->column('users.phone', '下单会员手机号');
            //$grid->column('og_id', '订单商品ID');
            $grid->column('order_price', '订单商品价格');
            $grid->column('proportion', '分佣比例');
            $grid->column('divide_price', '佣金');
            //$grid->column('proportion', '分佣比例%');
            $grid->column('sh_type', '分佣类型')->display(function ($val) {
                return OrderDivideRecord::COMMISSION_TYPE[$val];
            });
            $grid->column('is_div', '是否已分账')->display(function ($val) {
                return $val == 1 ? '是' : '否';
            });
            $grid->column('um_id', '商户/员工')->display(function ($val) {
                $stype = $this->sh_type;
                $name = '';
                if ($stype == 0) {
                    $name = '平台';
                } else if ($stype == 3) {
                    $name = Merchant::where('id', $val)->value('name');
                } else if ($stype == 5) {
                    $name = StoreAdminUsers::where('member_id', $val)->value('name');
                }

                return $name;
            });
            $grid->column('remark', '备注')->width(80);



            $grid->column('created_at');
            //$grid->column('updated_at')->sortable();

            $grid->disableCreateButton();
            $grid->disableViewButton();
            $grid->disableEditButton();
            $grid->disableDeleteButton();
            $grid->disableRowSelector();
            // 隐藏操作按钮
            $grid->disableActions(); // 隐藏所有操作按钮
            $grid->disableCreateButton(); // 隐藏新增按钮
            $grid->disableDeleteButton(); // 隐藏删除按钮

            // 添加导出字段映射
            $titles = [
                'id' => 'ID',
                'order.order_sn' => '订单号',
                'users.phone' => '会员手机号',
                'order_price' => '商品价格',
                'divide_price' => '分佣金额',
                'sh_type' => '分佣类型',
                'is_div' => '是否分账',
                'um_id' => '推荐人/商家',
                'created_at' => '创建时间'
            ];

            // 添加导出按钮
            $grid->export($titles)->rows(function ($rows) {
                foreach ($rows as $index => &$row) {
                    // 处理分佣类型显示
                    $row['is_div'] = $row['is_div'] == 1 ? '是' : '否';
                    $row['um_id'] = $row['um_id'] == 0 ? '平台' : $row['um_id'];

                    // 处理商家/员工显示
                    if ($row['sh_type'] == 0) {
                        $row['um_id'] = '平台';
                    } else if ($row['sh_type'] == 3) {
                        $row['um_id'] = Merchant::where('id',  $row['um_id'])->value('name');
                    } else if ($row['sh_type'] == 5) {
                        $row['um_id'] = StoreAdminUsers::where('id',  $row['um_id'])->value('name');
                    }

                    $row['sh_type'] = OrderDivideRecord::COMMISSION_TYPE[$row['sh_type']];
                }
                return $rows;
            });

            $grid->filter(function (Grid\Filter $filter) {
                // 更改为 panel 布局
                $filter->panel();
                $filter->like('order.order_sn', '订单号')->width(3);
                $filter->like('users.phone', '下单会员手机号')->width(3);
                // 修改分佣类型筛选为下拉选择
                $filter->equal('sh_type', '分佣类型')->select(OrderDivideRecord::COMMISSION_TYPE)->width(3);
                // 修改分佣类型筛选为下拉选择
                $filter->equal('is_div', '是否已分账')->select([0 => '否', 1 => '是'])->width(3);

                // 添加商家筛选
                $filter->where('um_id2', function ($query) {
                    $query->where('sh_type', 3) // 只筛选sh_type=3的记录
                        ->whereHas('order', function ($q) {
                            $q->where('um_id', $this->input);
                        });
                }, '商家')->select(Merchant::pluck('name', 'id'))->width(3);

                // 添加员工筛选
                $filter->where('um_id3', function ($query) {
                    $query->where('sh_type', 5) // 只筛选sh_type=5的记录
                        ->whereHas('order', function ($q) {
                            $q->where('um_id', $this->input);
                        });
                }, '员工')->select(StoreAdminUsers::where('role_id', 3)->pluck('name', 'member_id'))->width(3);

                // 添加时间范围快捷筛选
                $filter->scope('today', '今日')->whereDate('created_at', date('Y-m-d'));
                $filter->scope('month', '本月')->whereMonth('created_at', date('m'));
                $filter->scope('quarter', '本季度')->where(function ($query) {
                    $month = date('m');
                    $year = date('Y');

                    if ($month >= 1 && $month <= 3) {
                        // 第一季度 (1-3月)
                        $start = date('Y-m-d', strtotime('first day of January'));
                        $end = date('Y-m-d', strtotime('last day of March'));
                    } elseif ($month >= 4 && $month <= 6) {
                        // 第二季度 (4-6月)
                        $start = date('Y-m-d', strtotime('first day of April'));
                        $end = date('Y-m-d', strtotime('last day of June'));
                    } elseif ($month >= 7 && $month <= 9) {
                        // 第三季度 (7-9月)
                        $start = date('Y-m-d', strtotime('first day of July'));
                        $end = date('Y-m-d', strtotime('last day of September'));
                    } else {
                        // 第四季度 (10-12月)
                        $start = date('Y-m-d', strtotime('first day of October'));
                        $end = date('Y-m-d', strtotime('last day of December'));
                    }

                    $query->whereBetween('created_at', [$start, $end]);
                });
                $filter->scope('year', '本年')->whereYear('created_at', date('Y'));

                $filter->between('created_at', '创建时间')->datetime()->width(4);
            });





            //先注释,目前没有手动分账金额给平台的功能
            // $grid->actions(function (Grid\Displayers\Actions $actions) {
            //     //分账给平台
            //     if ($actions->row->is_div == 0 && in_array($actions->row->sh_type, [1, 2])) {
            //         $actions->append(new TransferToPlatForm('分账给平台', $actions->row->id));
            //     }
            // });
        });
    }

    /**
     * Make a show builder.
     *
     * @param mixed $id
     *
     * @return Show
     */
    protected function detail($id)
    {
        return Show::make($id, new OrderDivideRecord(), function (Show $show) {
            $show->field('id');
            $show->field('order_id');
            $show->field('user_id');
            $show->field('og_id');
            $show->field('order_price');
            $show->field('divide_price');
            $show->field('proportion');
            $show->field('sh_type');
            $show->field('is_div');
            $show->field('remark');
            $show->field('um_id');
            $show->field('created_at');
            $show->field('updated_at');
        });
    }

    /**
     * Make a form builder.
     *
     * @return Form
     */
    protected function form()
    {
        return Form::make(new OrderDivideRecord(), function (Form $form) {
            $form->display('id');
            $form->text('order_id');
            $form->text('user_id');
            $form->text('og_id');
            $form->text('order_price');
            $form->text('divide_price');
            $form->text('proportion');
            $form->text('sh_type');
            $form->text('is_div');
            $form->text('remark');
            $form->text('um_id');

            $form->display('created_at');
            $form->display('updated_at');
        });
    }
}