<?php

namespace App\Admin\Controllers;

use App\Models\Goods;
use App\Http\Controllers\Controller;
use Encore\Admin\Controllers\HasResourceActions;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Encore\Admin\Layout\Content;
use Encore\Admin\Show;
use Illuminate\Http\Request;
use App\Models\CartItem;
use App\Models\Order;
use App\Models\Activity;
use App\Models\GridMy;
use App\Admin\Extensions\Tools\UserGender;

class GoodsController extends Controller {
	use HasResourceActions;

	/**
	 * Index interface.
	 *
	 * @param Content $content
	 * @return Content
	 */
	public function index(Content $content, Request $request) {
		return $content->header ( '商品' )->description ( '列表' )->body ( $this->grid () );
	}

	/**
	 * Edit interface.
	 *
	 * @param mixed $id
	 * @param Content $content
	 * @return Content
	 */
	public function edit($id, Content $content) {
		return $content->header ( '商品' )->description ( '编辑' )->body ( $this->form ()->edit ( $id ) );
	}

	/**
	 * Create interface.
	 *
	 * @param Content $content
	 * @return Content
	 */
	public function create(Content $content) {
		return $content->header ( '商品' )->description ( '添加' )->body ( $this->form () );
	}

	/**
	 * Make a grid builder.
	 *
	 * @return Grid
	 */
	protected function grid() {
		$grid = new GridMy ( new Goods () );
		$grid->product_id ( '商品ID' );
		$grid->sku ( 'sku' );
		if (request ()->activity_id) {
			$grid->model ()->where ( 'activity_id', '=', request ()->activity_id );
			$grid->name ( '商品名称' )->editable ();
			$grid->activity_name ( '所属活动' )->display ( function () {
				return Activity::find ( $this->activity_id )->name;
			} );
			$grid->price ( '商品市场价' );
			$grid->base_price ( '保底价格' )->editable ();
			$grid->stock ( '商品数量' )->editable ();
			$grid->cut_num ( '砍价数量' )->editable ();
			$grid->tools ( function ($tools) {
				$tools->append ( new UserGender () );
			} );
			$grid->sort ( '排序' )->editable ()->sortable ();
			$grid->actions ( function ($actions) {
				$actions->disableView ();
				$url = url ( 'admin/cut?goods_id=' ) . $actions->row->id;
				$actions->append ( "<a href='{$url}'> 砍价列表</a>" );
			} );
			$grid->filter ( function ($filter) {
				$filter->disableIdFilter ();
				$filter->like ( 'name', '商品名称' );
				$filter->like ( 'sku', 'SKU' );
			} );
		} else {
			$grid->name ( '商品名称' );
			$grid->activity_name ( '所属活动' )->display ( function () {
				return (Activity::find ( $this->activity_id ))->name ?? '（未知活动）';
			} );
			$grid->price ( '商品市场价' );
			$grid->base_price ( '保底价格' );
			$grid->stock ( '商品数量' );
			$grid->cut_num ( '砍价数量' );
			$grid->sort ( '排序' )->sortable ();
			$grid->actions ( function ($actions) {
				$actions->disableView ();
				$actions->disableEdit ();
				$actions->disableDelete ();
				$url = url ( 'admin/cut?goods_id=' ) . $actions->row->id;
				$actions->append ( "<a href='{$url}'> 砍价列表</a>" );
			} );
			$grid->disableCreateButton ();
			$grid->filter ( function ($filter) {
				$filter->disableIdFilter ();
				$filter->like ( 'name', '商品名称' );
				$filter->like ( 'sku', 'SKU' );
				$filter->equal ( 'activity_id', '所属活动' )->select ( Activity::getSelectArr () );
			} );
		}

		$grid->model ()->orderBy ( 'updated_at', 'desc' );
		$grid->setCreateUrlParam ( [ 
				'activity_id' => request ()->activity_id
		] );
		$grid->difference ( '差价' )->display ( function () {
			return $this->price - $this->base_price;
		} );

		$grid->is_free_shipping ( '是否包邮' )->display ( function ($is_free_shipping) {
			return $is_free_shipping ? '是' : '否';
		} );
		$grid->updated_at ( '编辑时间' );

		$grid->disableExport ();

		return $grid;
	}

	/**
	 * Make a form builder.
	 *
	 * @return Form
	 */
	protected function form() {
		$form = new Form ( new Goods () );
		$form->text ( 'sku', '商品sku' )->required ();
		$form->text ( 'name', '商品名称' )->required ();
		$form->currency ( 'price', '市场价' )->symbol ( '￥' );
		$form->currency ( 'base_price', '保底价' )->symbol ( '￥' );
		$form->number ( 'stock', '商品数量' )->required ()->default(0);
		$form->number ( 'cut_num', '砍价数量' )->required ()->default(0);
		$form->radio ( 'is_free_shipping', '是否包邮' )->options ( Goods::$isFreeShippingArr )->default ( '1' );
		$form->number ( 'sort', '排序' )->required ()->default(0);
		$form->hidden ( 'activity_id' )->default ( request ()->activity_id );
		$form->saving ( function (Form $form) {
			if (request ()->getMethod () == 'POST') {
				$form->model ()->product_id = Goods::getProductId ( $form->sku );
				$form->model ()->img_url = Goods::getSkuInfo ( $form->sku ) ['image_colors'] [0] ['main_image'];
			}
		} );
		return $form;
	}
}
