<?php

namespace App\Admin\Forms;

use App\Models\GoodSku;
use App\Models\MerchantGoodsStore;
use App\Models\MerchantGoodSku;
use Dcat\Admin\Widgets\Form;
use Dcat\Admin\Layout\Row;
use Dcat\Admin\Form\NestedForm;
use Dcat\Admin\Widgets\Table;
use Dcat\Admin\Widgets\Tool;
use Dcat\Admin\Contracts\LazyRenderable;
use Dcat\Admin\Traits\LazyWidget;
use Illuminate\Support\Facades\DB;
//
class MerchantStoreForms extends Form implements LazyRenderable
{
  use LazyWidget;
  protected $modalId = 'show-current-user';

  /**
   * Handle the form request.
   *
   * @param array $input
   *
   * @return mixed
   */
  public function handle(array $input)
  {
    $goods_id = (int)$_POST['goods_id'];
    $mgs_id = (int)$_POST['mgs_id'];
    $attr_ids = $_POST['attr_id'];
    $stocks = $_POST['stock'];

    if (!$goods_id || !$mgs_id || !$attr_ids || !$stocks) {
      return $this->response()->error('参数错误')->refresh();
    }
    //商品库存信息
    $msgObj = MerchantGoodsStore::find($mgs_id);
    $merchant_id = $msgObj->merchant_id;
    $goods_id = $msgObj->goods_id;
    $logData = [];

    foreach ($attr_ids as $kk => $vv) {
      $gskuObj = GoodSku::find($vv); //商品信息
      //获取商户库存信息
      $merStock = MerchantGoodSku::where(['goods_id' => $goods_id, 'attr_id' => $vv])->sum('stock');
      $surplusStock = $gskuObj->stock - $merStock; //可供库存数量
      $stockNum = ($surplusStock >= $stocks[$kk] && $stocks[$kk]) ? (int)$stocks[$kk] : 0;
      if ($stockNum) {
        //查下库存记录是否存在
        $skuObj = MerchantGoodSku::where(['mgs_id' => $mgs_id, 'goods_id' => $goods_id, 'attr_id' => $vv])->first();
        if ($skuObj) {
          $skuObj->stock += $stockNum;
          $skuObj->save();
        } else {
          $skuObj = new MerchantGoodSku();
          $skuObj->mgs_id = $mgs_id;
          $skuObj->merchant_id = $merchant_id;
          $skuObj->goods_id = $goods_id;
          $skuObj->attr_id = $vv;
          $skuObj->stock = $stockNum;
          $skuObj->save();
        }

        //记录操作日志
        $logData[$kk]['mgs_id'] = $mgs_id;
        $logData[$kk]['goods_id'] = $goods_id;
        $logData[$kk]['attr_id'] = $gskuObj->id;
        $logData[$kk]['change'] = $stockNum;
        $logData[$kk]['created_at'] = date('Y-m-d H:i:s');
      }
    }
    $this->addStoreLog($logData);

    return $this
      ->response()
      ->success('Processed successfully.')
      ->refresh();
  }

  private function addStoreLog($data = [])
  {
    if (!$data) {
      return true;
    }
    DB::table('merchant_store_sku_log')->insert($data);
  }

  /**
   * Build a form here.
   */
  public function form()
  {
    //$this->text('name')->required();
    //$this->email('email')->rules('email');

    // 异步加载的字段
    $this->html('<div class="row">
                        <div class="col-md-12">
                            <table class="table">
                                <thead>
                                    <tr>
                                        <th width="23%" style="text-align:center;">商品名称</th>
                                        <th width="23%" style="text-align:center;">商品规格</th>
                                        <th width="23%" style="text-align:center;">增加库存</th>
                                        <th width="23%" style="text-align:center;">剩余库存</th>
                                    </tr>
                                </thead>
                                <tbody id="tabletr">
                                    <!-- 表格数据 -->
                                    <!--<tr>
                                        <td style="text-align:center;vertical-align: middle;">数据1</td>
                                        <td style="text-align:center;vertical-align: middle;">蓝色、大号</td>
                                        <td ><input type="text" name="remark" value="" class="form-control field_remark _normal_" placeholder=""></td>
                                        <td style="text-align:center;vertical-align: middle;">123</td>
                                    </tr>-->
                                    <!-- 更多行数据 -->
                                </tbody>
                            </table>
                        </div>
                    </div>', $synchronized = false);
  }


  /**
   * The data of the form.
   *
   * @return array
   */
  public function default()
  {
    return [
      'name'  => '6785678567',
      'email' => 'John.Doe@gmail.com',
    ];
  }
}