<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Str;
use Illuminate\Http\Request;


use App\Supply;
use App\Staff;
use Carbon\Carbon;

class SupplyController extends Controller
{
	public function search(Request $request)
	{
		$formdata = [
			'SupplyDateFrom' => $request->input('SupplyDateFrom', null),
			'SupplyDateTo' => $request->input('SupplyDateTo', null),
			'SupplyNumber' => $request->input('SupplyNumber', null),
			'SupplierCode' => $request->input('SupplierCode', null),
			'transactionID' => $request->input('transactionID', null),
		];
		logger('Supply', ['formdata' => $formdata]);

		$query = Supply::query();
		$SupplyDateColumn = "CAST(supplies.attributes->'$.\"仕入日\"' AS DATE)";
		if ($formdata['SupplyDateFrom'])
		{
			$query->whereRaw("'{$formdata['SupplyDateFrom']}' <= {$SupplyDateColumn}");
		}
		if ($formdata['SupplyDateTo'])
		{
			$query->whereRaw(" {$SupplyDateColumn} <= '{$formdata['SupplyDateTo']}'");
		}
		if ($formdata['SupplyNumber'])
		{
			$query->where('SupplyNumber', 'LIKE', "%{$formdata['SupplyNumber']}%");
		}
		if ($formdata['SupplierCode'])
		{
			$query->whereRaw("(TRIM(BOTH '\"' FROM attributes->'$.仕入先.SupplierCode') LIKE '%{$formdata['SupplierCode']}%')");
		}

		logger('Supply.search', ['sql' => $query->toSql()]);


		$supplies = $query->get();
		foreach($supplies as $supply)
		{
			$supply['attributes'] = json_decode($supply['attributes'],true);
			$supply['details'] = json_decode($supply['details'],true);
		}
		logger('Supply', ['sql' => $query->toSql()]);

		$resp = [
			'supplies' => $supplies,
			'transactionID' => $formdata['transactionID'],
		];
		return response()->json($resp);
	}

	public function update(Request $request)
	{
		$resp = 0;
		$formdata = [
			'action' => $request->input('action', null),
			'supply_id' => $request->input('supply_id', null),
			'attributes' => $request->input('attributes', null),
			'details' => $request->input('details', null),
		];

		logger('Supply.update', ['formdata' => $formdata]);

		if (empty($formdata['attributes']['SupplyNumber'])) {
			// 新規仕入伝票は 伝票番号を付番
			$formdata['attributes']['SupplyNumber'] = Supply::GetNewSupplyNumber();
		}

		$fields = [
			'attributes' => json_encode($formdata['attributes']),
			'details' => json_encode($formdata['details']),
			'deleted' => null,
		];

		$supplyModel = Supply::query();
		if ($formdata['action'] == 'update') {
			$id = $formdata['supply_id'];
			$supplyModel->updateOrInsert(['id' => $formdata['supply_id']],$fields);
		} else {
			logger('Supply.update', ['__LINE__' => __LINE__]);
			$id = $supplyModel->insertGetId($fields);
			logger('Supply.update', ['__LINE__' => __LINE__]);
		}

		$resp = [
			'id' => $id,
		];
		return response()->json($resp);

	}


	public function delete(Request $request)
	{
		$resp = 0;
		$formdata = [
			'supply_id' => $request->input('supply_id', null),
		];

		$supplyModel = Supply::query();
		$resp = $supplyModel->where('id', $formdata['supply_id'])
			->update(['deleted' => Carbon::now()]);

		return response()->json($resp);
	}

	public function datalist(Request $request)
	{
		$formdata = [
			'Field' => $request->input('Field', 0),
			'Days' => $request->input('Days', 0),
		];
		logger('Supply.datalist', ['formdata' => $formdata]);

		if ($formdata['Field'] == 'staff')
		{
			$query = Staff::query();
			$query->selectRaw("name AS DataItem");
			$query->distinct();
			//logger('Order', ['sql' => $query->toSql()]);
			$rows = $query->get();
			$datalist = [];
			//logger('Order', ['rows' => $rows]);
			foreach($rows as $row) {
				$datalist[] = $row['DataItem'];
			}
			logger('Supply', ['datalist' => $datalist]);
			$resp = [
				'datalist' => $datalist,
			];
			return response()->json($resp);
		}
    }


	// 帳票
	function report()
	{
		logger('Supply.report', [__FILE__ => __LINE__]);
		$formdata = [
			'supply_id' => request('supply_id'),
		];

		$resp = 0;
		logger('Supply.report', ['formdata' => $formdata]);

		$query = Supply::query();
		//$query->where('deleted', null);
		//$query->whereRaw("JSON_CONTAINS_PATH(attributes,'all','$.Outline.OrderNumber','$.Outline.OrderDate') = 1");
		//$query->where("attributes->'$.supplier' != CAST('null' AS JSON)");
		$query->where('id', $formdata['supply_id']);
		logger('Supply.report', ['sql' => $query->toSql()]);
		$supply = $query->first();

		logger('Supply.report', ['supply' => $supply]);

		$delivery['attributes'] = json_decode($supply['attributes'],true);

		$viewdata = [
			'supply' => $supply
		];

		logger('Supply.report', ['viewdata' => $viewdata]);
		//return response()->json($formdata);
		return view("supply.report01",compact('viewdata'));

    }
}
