<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\View\View;

use App\Models\Service;

class ServiceController extends Controller
{
	/**
	 * Update a service
	 *
	 * @note: Route Middleware protects this path
	 * @param Service $o
	 * @return View|void
	 */
	public function update(Request $request,Service $o)
	{
		switch ($o->order_status) {
			case 'CANCEL-REQUEST':
				if ($request->post()) {
					if (! $request->post('date_end'))
						return redirect()->back()->withErrors('Cancellation Date not provided');

					$o->date_end = $request->post('date_end');

					foreach (['cancel_notes'] as $key) {
						if ($request->post($key))
							$o->setOrderInfo($key,$request->post($key));
					}

					$o->order_status='CANCEL-PENDING';
					$o->save();

					return redirect()->to(url('u/service',$o->id))->with('updated','Service cancellation submitted.');
				}

				return $this->update_request_cancel($o);

			case 'ORDER-SENT':
				if ($request->post()) {
					foreach (['reference','notes'] as $key) {
						$o->setOrderInfo($key,$request->post($key));
					}

					$o->save();

					foreach ($request->post($o->stype) as $k=>$v) {
						$o->type->{$k} = $v;
					}

					$o->type->save();

					return redirect()->to(url('u/service',$o->id))->with('updated','Order sent notes updated.');
				}

				return $this->update_order_status($o);

			case 'PROVISION-PLANNED':
				if ($request->post()) {
					foreach (['provision_notes'] as $key) {
						$o->setOrderInfo($key,$request->post($key));
					}

					$o->date_start = $request->post('date_start');

					$o->save();

					foreach ($request->post($o->stype) as $k=>$v) {
						$o->type->{$k} = $v;
					}

					$o->type->save();

					return redirect()->to(url('u/service',$o->id))->with('updated','Order sent notes updated.');
				}

				return $this->update_provision_planned($o);

			default:
				abort(499,'Not yet implemented');
		}
	}

	private function update_order_status(Service $o)
	{
		return View('r.service.order.sent',['o'=>$o]);
	}

	private function update_request_cancel(Service $o)
	{
		return View('u.service.order.cancel',['o'=>$o]);
	}

	private function update_provision_planned(Service $o)
	{
		return View('r.service.order.provision_plan',['o'=>$o]);
	}
}