<?php

namespace App\Http\Controllers\Admin;

use App\Http\Models\Asset;
use App\Http\Models\AssetType;
use App\Http\Requests\School\AssetSaveRequest;
use App\Http\Requests\School\AssetTypeSaveRequest;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

/**
 * 引擎力学堂
 * Class SchoolController
 * @package App\Http\Controllers\Admin
 */
class SchoolController extends Controller
{
    //资源类型
    public function assetTypes(Request $request)
    {
        if (!$request->ajax()) {
            return view('admin/school/asset_type');
        }

        if ($keyword = $request->input('keyword')) {
            $filter[] = ['title', 'like', '%' . $keyword . '%'];
        }

        $records = AssetType::query()->where($filter ?? [])->orderByDesc('id')
            ->paginate($request->input('pageSize') ?? TABLE_PAGE_SIZE);
        $items = $records->items();
        return response()->json([
            'rows' => $items,
            'total' => $records->total()
        ]);
    }
    //资源类型 保存
    public function assetTypesSave(AssetTypeSaveRequest $request, $id)
    {
        if (!$request->ajax()) {
            if ($id > 0) {
                $record = AssetType::query()->find($id);
            }
            return view('admin/school/asset_type_save', [
                'data' => $record ?? null
            ]);
        }
        $validated = $request->validated();
        AssetType::query()->updateOrCreate(['id' => $id], $validated);
        return response()->json(['message' => '操作成功']);
    }
    //资源类型删除
    public function assetTypeDelete($id)
    {
        if (Asset::query()->where(['type_id' => $id])->exists()) {
            return response()->json(['message' => '请先删除此类型下的资源'], 400);
        }

        AssetType::query()->where(['id' => $id])->delete();
        return response()->json(['message' => '操作成功']);
    }
    //资源列表
    public function assets(Request $request)
    {
        if (!$request->ajax()) {
            $assetTypes = AssetType::query()->get();
            return view('admin/school/asset', [
                'assetTypes' => $assetTypes
            ]);
        }
        if ($typeId = $request->input('type_id')) {
            $filter[] = ['type_id', '=', $typeId];
        }

        $records = Asset::query()->with(['assetType'])->where($filter ?? [])->orderByDesc('id')
            ->paginate($request->input('pageSize') ?? TABLE_PAGE_SIZE);
        $items = $records->items();
        array_walk($items, function ($item) {
            $item->type_title = $item->assetType->title ?? '';
        });

        return response()->json([
            'rows' => $items,
            'total' => $records->total()
        ]);
    }
    //资源保存
    public function assetsSave(AssetSaveRequest $request, $id)
    {
        if (!$request->ajax()) {
            $assetTypes = AssetType::query()->get();
            if ($id > 0) {
                $record = Asset::query()->find($id);
            }
            return view('admin/school/asset_save', [
                'data' => $record ?? null,
                'assetTypes' => $assetTypes
            ]);
        }

        $validated = $request->validated();
        Asset::query()->updateOrCreate(['id' => $id], $validated);
        return response()->json(['message' => '操作成功']);
    }
    //资源保存
    public function assetsDelete(Request $request)
    {
        $ids = $request->input('ids');
        Asset::query()->whereIn('id', $ids)->delete();
        return response()->json(['message' => '操作成功']);
    }
}