<?php

namespace App\Http\Controllers\Api\v1;

use App\Components\Functions;
use App\Models\BreakHistory;
use App\Models\Room;
use Carbon\Carbon;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class BreakHistoryController extends BaseController
{
    //
    /**
     * @api {get} /list Lấy danh sách lịch sử sửa chữa
     * @apiName list
     * @apiGroup Break
     *
     * @apiParam {String} room_id
     * @apiParam {String} limit
     * @apiParam {String} offset
     *
     * @apiDescription Xóa tài sản
     * @apiSuccess {Number} status 1 hoặc 0. 1 là thành công, 0 là không thành công.
     * @apiSuccess {String} message  Tin nhắn hệ thống.
     * @apiSuccess {String} data
     */

    public function getBreakHistory(Request $request)
    {
        $id = $request->input('room_id');
        //$room = Room::find($id);

        $limit = $request->input('limit', 10);
        $offset = $request->input('offset', 0);
        $items = BreakHistory::where('room_id', $id)
            ->selectRaw('breaks.*, CONCAT(items.name, " / ", items.code, " / ", items.reference) as item_name')
            ->leftJoin('items', 'breaks.item_id', '=', 'items.id')
            ->orderBy('id', 'desc')
            ->limit($limit)
            ->offset($offset)
            ->get();

        $retVal = [];

        foreach ($items as $item) {
            $imageArr = [];
            $images = \DB::table('break_images')
                ->where('break_id', $item->id)
                ->get();
            foreach ($images as $image)
            {
                $imageArr[] = [
                    'id' => $image->id,
                    'url' => '/files/'.$image->image
                ];
            }
            $retVal[] = [
                'id' => $item->id,
                'content' => $item->content,
                'status' => $item->status,
                'room_id' => $item->room_id,
                'created_at' => $item->created_at->format('d/m/Y H:i'),
                'item' => [
                    'id' => $item->item_id,
                    'name' => $item->item_name,
                ],
                'user_repair' => $item->user_repair,
                'day_repair' => $item->day_repair,
                'cost' => $item->cost,
                'images' => $imageArr
            ];
        }

        return response([
            'status' => 1,
            'data' => $retVal
        ]);
    }


    /**
     * @api {post} /create Thêm lịch sử sửa chữa
     * @apiName create
     * @apiGroup Break
     *
     * @apiParam {String} content
     * @apiParam {String} status 0 là chưa làm, 1 là đang làm, 2 là đã hoàn thành
     * @apiParam {String} room_id
     * @apiParam {String} item_id
     * @apiParam {File} images mảng nhiều file ảnh
     *
     * @apiParam {File} user_repair Người sửa chữa
     * @apiParam {File} day_repair Ngày sửa chữa, dạng d/m/Y
     * @apiParam {File} cost Chi phí
     *
     * @apiDescription Thêm lịch sử sửa chữa
     * @apiSuccess {Number} status 1 hoặc 0. 1 là thành công, 0 là không thành công.
     * @apiSuccess {String} message  Tin nhắn hệ thống.
     * @apiSuccess {String} data
     */
    public function storeBreakHistory(Request $request)
    {
        $data = $request->except('images');
        $content = $data['content'];
        $status = $data['status'];
        $roomId = $data['room_id'];
        $cost = isset($data['cost']) ? $data['cost'] : 0;
        $userRepair = $data['user_repair'];
        $dayRepair = $data['day_repair'];
        $itemId = null;
        if(isset($data['item_id'])) {
            $itemId = $data['item_id'];
        }

        if(!empty($data['day_repair']))
        {
            $dayRepair = Carbon::createFromFormat('d/m/Y', $dayRepair)->toDateString();
        }
        $room = Room::find($roomId);

        if (!$room) {
            return response([
                'status' => 0,
                'message' => 'Dữ liệu không hợp lệ'
            ]);
        }

        $hostelId = $room->hostel->id;
        $item = BreakHistory::create([
            'content' => $content,
            'status' => $status,
            'room_id' => $roomId,
            'hostel_id' => $hostelId,
            'user_id' => $this->user->id,
            'item_id' => $itemId,
            'user_repair' => $userRepair,
            'day_repair' => $dayRepair,
            'cost' => $cost
        ]);

        if ($request->file('images')) {
            $images = $request->file('images');
            if (is_array($images)) {
                foreach ($images as $image) {
                    $imageItem = Functions::uploadImage($image);
                    \DB::table('break_images')->insert([
                        'image' => $imageItem,
                        'break_id' => $item->id,
                        'created_at' => Carbon::now()->toDateTimeString(),
                        'updated_at' => Carbon::now()->toDateTimeString()
                    ]);
                }
            }
        }

        return response([
            'status' => 1,
            'message' => 'Thành công'
        ]);
    }

    /**
     * @api {post} /update Cập nhật lịch sử sửa chữa
     * @apiName update
     * @apiGroup Break
     *
     * @apiParam {String} id
     * @apiParam {String} content
     * @apiParam {String} status 0 là chưa làm, 1 là đang làm, 2 là đã hoàn thành
     * @apiParam {String} room_id
     * @apiParam {String} item_id
     *  @apiParam {String} deleted_images Mảng id các ảnh bị xóa
     * @apiParam {File} images mảng nhiều file ảnh
     *
     * @apiDescription Thêm lịch sử sửa chữa
     * @apiSuccess {Number} status 1 hoặc 0. 1 là thành công, 0 là không thành công.
     * @apiSuccess {String} message  Tin nhắn hệ thống.
     * @apiSuccess {String} data
     */
    public function updateBreakHistory(Request $request)
    {
        $data = $request->except('images');
        $deletedImages = $request->input('deleted_images');
        $item = BreakHistory::find($data['id']);

        if (!$item) {
            return response([
                'status' => 0,
                'message' => 'Dữ liệu không hợp lệ'
            ]);
        }

        $item->update($data);

        if ($request->file('images')) {
            $images = $request->file('images');
            if (is_array($images)) {
                foreach ($images as $image) {
                    $imageItem = Functions::uploadImage($image);
                    \DB::table('break_images')->insert([
                        'image' => $imageItem,
                        'break_id' => $item->id,
                        'created_at' => Carbon::now()->toDateTimeString(),
                        'updated_at' => Carbon::now()->toDateTimeString()
                    ]);
                }
            }
        }

        if (is_array($deletedImages)) {
            \DB::table('break_images')->whereIn('id', $deletedImages)->delete();
        }

        return response([
            'status' => 1,
            'message' => 'Thành công'
        ]);
    }

    /**
     * @api {post} /delete Xóa lịch sử sửa chữa
     * @apiName delete
     * @apiGroup Break
     *
     * @apiParam {String} id
     *
     * @apiDescription Xóa lịch sử sửa chữa
     * @apiSuccess {Number} status 1 hoặc 0. 1 là thành công, 0 là không thành công.
     * @apiSuccess {String} message  Tin nhắn hệ thống.
     * @apiSuccess {String} data
     */
    public function deleteBreakHistory(Request $request)
    {
        $id = $request->input('id');
        BreakHistory::where('id', $id)->delete();
        return response([
            'status' => 1,
            'message' => 'Thành công'
        ]);

    }
}
