<?php

/**
 * 文件功能：后台房间管理控制器
 * 管理员可新增、编辑、删除房间信息（名称、介绍、公告等）
 * 系统房间（room_keep = true）不允许删除
 *
 * @author  ChatRoom Laravel
 *
 * @version 1.1.0
 */

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\Room;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\View\View;

class RoomManagerController extends Controller
{
    /**
     * 显示所有房间列表
     */
    public function index(): View
    {
        $rooms = Room::orderBy('id')->get();

        return view('admin.rooms.index', compact('rooms'));
    }

    /**
     * 新增房间
     */
    public function store(Request $request): RedirectResponse
    {
        $data = $request->validate([
            'room_name' => 'required|string|max:100|unique:rooms,room_name',
            'room_des' => 'nullable|string|max:500',
            'room_owner' => 'nullable|string|max:50',
            'permit_level' => 'required|integer|min:0|max:15',
            'door_open' => 'required|boolean',
        ], [
            'room_name.unique' => '房间名称已存在，请换一个名称。',
        ]);

        // 设置新建房间的默认值
        $data['room_keep'] = false;   // 新建房间均为非系统房间，可删除
        $data['build_time'] = now();

        $room = Room::create($data);

        return redirect()->route('admin.rooms.index')->with('success', "房间「{$room->room_name}」新建成功！");
    }

    /**
     * 更新房间信息
     *
     * @param  Room  $room  路由模型自动注入
     */
    public function update(Request $request, Room $room): RedirectResponse
    {
        $data = $request->validate([
            'room_name' => 'required|string|max:100',
            'room_des' => 'nullable|string|max:500',
            'announcement' => 'nullable|string|max:500',
            'room_owner' => 'nullable|string|max:50',
            'permit_level' => 'required|integer|min:0|max:15',
            'door_open' => 'required|boolean',
        ]);

        $room->update($data);

        return redirect()->route('admin.rooms.index')->with('success', "房间「{$room->room_name}」信息已更新！");
    }

    /**
     * 删除房间（系统房间不允许删除）
     *
     * @param  Room  $room  路由模型自动注入
     */
    public function destroy(Room $room): RedirectResponse
    {
        if ($room->room_keep) {
            return redirect()->route('admin.rooms.index')->with('error', '系统房间不允许删除！');
        }

        $name = $room->room_name;
        $room->delete();

        return redirect()->route('admin.rooms.index')->with('success', "房间「{$name}」已删除！");
    }
}
