import { z } from "zod";
import { occupanciesSchema } from "./occupancy.schema";
import { requestsSchema } from "./request.schema";

export const roomsSchema = z.object({
  id: z.number(),
  propId: z.number(),
  flatId: z.number(),
  floor: z.string(),
  roomNum: z.string(),
  extendedName: z.string(),
  roomOptionId: z.number(),
  status: z.number(),
  createdAt: z.string().datetime(),
  updatedAt: z.string().datetime(),
});

type roomsTypes = z.infer<typeof roomsSchema>;

export const SendRoomRequestSchema = z.object({
  propGId: z.string(),
  roomId: roomsSchema.shape.id,
  floor: roomsSchema.shape.floor,
});

export const AddRoomsSchema = z.object({
  propId: z.number(),
  rooms: z.array(
    z.object({
      roomCount: z.number().gt(0),
      floorNumber: roomsSchema.shape.floor,
    })
  ),
});
export const AddRoomsForFlatSchema = z.object({
  propId: z.number(),
  rooms: z.array(
    z.object({
      roomCount: z.number().gt(0),
      flatId: roomsSchema.shape.flatId,
    })
  ),
});

export const EditRoomsNumSchema = z.object({
  roomId: z.number(),
  newRoomNum: z.string().min(1),
});

export const AddBedsSchema = z.object({
  roomOptionId: z.number(),
  rooms: z.array(roomsSchema.shape.id),
});

export const ApproveRoomRequestSchema = z.object({
  requestId: requestsSchema.shape.id,
  monthlyRent: occupanciesSchema.shape.rent,
  securityDeposit: occupanciesSchema.shape.security,
  agreementStartDate: occupanciesSchema.shape.agreementStartDate,
  rentalCycle: occupanciesSchema.shape.rentalCycle,
  agreementPeriod: occupanciesSchema.shape.agreementPeriod,
  noticePeriod: occupanciesSchema.shape.noticePeriod,
  lockInPeriod: occupanciesSchema.shape.lockInPeriod,
  moveInDate: occupanciesSchema.shape.moveInDate,
  electricityReading: occupanciesSchema.shape.electricityReading.optional(),
  allBedsOccupied: z.boolean(),
});

export const RejectRoomRequestSchema = z.object({
  requestId: requestsSchema.shape.id,
});

export const CancelRoomRequestSchema = z.object({
  requestId: requestsSchema.shape.id,
});

export const ActivateSchema = z.object({
  roomId: z.number().gt(0),
});

export const DeactivateSchema = z.object({
  roomId: z.number().gt(0),
});

export const SwitchRoomSchema = z.object({
  roomId: roomsSchema.shape.id,
  newRoomId: roomsSchema.shape.id,
  tenantId: z.number().gt(0),
  rent: occupanciesSchema.shape.rent,
});

export default roomsTypes;
