import { Router } from "express";
import room from "../controllers/room.controller";
import authorize from "../middlewares/authorization.middleware";
import validateData from "../middlewares/validation.middleware";
import {
  ActivateSchema,
  AddBedsSchema,
  AddRoomsForFlatSchema,
  AddRoomsSchema,
  ApproveRoomRequestSchema,
  CancelRoomRequestSchema,
  DeactivateSchema,
  EditRoomsNumSchema,
  RejectRoomRequestSchema,
  SendRoomRequestSchema,
  SwitchRoomSchema,
} from "../schemas/room.schema";
import {
  CreateRoomOptionSchema,
  EditRoomOptionSchema,
} from "../schemas/roomOption.schema";
import { AddExtraBedSchema } from "../schemas/bed.schema";

const router = Router();

router.get("/list/:propGId", authorize, room.TenantRoomList);

router.post(
  "/request/send",
  authorize,
  validateData(SendRoomRequestSchema),
  room.SendRoomRequest
);

router.get("/request/status/:requestId", authorize, room.RoomRequestStatus);

router.post(
  "/option/create",
  authorize,
  validateData(CreateRoomOptionSchema),
  room.CreateRoomOption
);

router.post(
  "/option/update",
  authorize,
  validateData(EditRoomOptionSchema),
  room.EditRoomOption
);

router.get("/option/list/:propId/:type", authorize, room.RoomOptionList);

router.post("/add", authorize, validateData(AddRoomsSchema), room.AddRooms);
router.post(
  "/add-for-flat",
  authorize,
  validateData(AddRoomsForFlatSchema),
  room.AddRoomsForFlat
);
// router.post("/editrooms", authorize, validateData(EditRoomsSchema), room.EditRooms);
router.post(
  "/edit",
  authorize,
  validateData(EditRoomsNumSchema),
  room.EditRoomNum
);
router.post("/beds/add", authorize, validateData(AddBedsSchema), room.AddBeds);

router.get("/list/client/:propId", authorize, room.ClientRoomList);
router.get("/list-for-flat/client/:propId", authorize, room.ClientFlatRoomList);
router.get("/option/count/:propId", authorize, room.RoomOptionCount);

// Not being used
router.get("/list/active/:propId", authorize, room.ActiveRoomListOnly);

router.post(
  "/request/approve",
  authorize,
  validateData(ApproveRoomRequestSchema),
  room.ApproveRoomRequest
);

router.post(
  "/request/reject",
  authorize,
  validateData(RejectRoomRequestSchema),
  room.RejectRoomRequest
);

router.post(
  "/request/cancel",
  authorize,
  validateData(CancelRoomRequestSchema),
  room.CancelRoomRequest
);

router.post(
  "/status/activate",
  authorize,
  validateData(ActivateSchema),
  room.MakeActive
);

router.post(
  "/status/deactivate",
  authorize,
  validateData(DeactivateSchema),
  room.MakeDeactive
);

router.post(
  "/switch",
  authorize,
  validateData(SwitchRoomSchema),
  room.SwitchRoom
);

router.post(
  "/switch/full-occupied",
  authorize,
  validateData(SwitchRoomSchema),
  room.SwitchRoomFullOccupied
);

router.get("/active/list/:propId", authorize, room.ActiveRoomListOnly);
router.get("/available/list/:propId", authorize, room.ActiveRoomsWithAvailableBeds);

router.post(
  "/extra-bed/add",
  authorize,
  validateData(AddExtraBedSchema),
  room.AddExtraBeds
);

router.post("/extra-bed/remove", authorize, room.RemoveExtraBeds);

router.post("/update/bed/bunk/position", authorize, room.EditBunkPosition);

router.post("/delete/room/package", authorize, room.DeleteRoomPackage);

router.get(
  "/bed/history/:bedId",
  authorize,
  room.ListBedHistory
);

router.post(
  "/hold/bed",
  authorize,
  room.HoldBed
);

router.get("/list", authorize, room.List);

export default router;
