import "reflect-metadata";
import { Controller, Get, Post, Put, Patch, Route, Path, Query, Body } from "@tsoa/runtime";
import itemsService from "~/services/item/items";

@Route("items")
export class ItemsController extends Controller {
	/**
	 * Retrieves item thumbnails
	 */
	@Get("/thumbnails")
	public async getThumbnails(): Promise<any[]> {
		const data = await itemsService.getThumbnails();
		return Array.isArray(data) ? data : [data];
	}

	/**
	 * Retrieves all items
	 */
	@Get()
	public async getList(): Promise<any[]> {
		const data = await itemsService.getList();
		return Array.isArray(data) ? data : [data];
	}

	/**
	 * Creates a new item
	 */
	@Post()
	public async createItem(@Query() itemCategoryID?: string | number): Promise<any> {
		return await itemsService.create(itemCategoryID);
	}

	/**
	 * Updates an item
	 */
	@Put("/:id")
	public async updateItem(@Path() id: string | number, @Body() body: any): Promise<any> {
		return await itemsService.update(id, body);
	}

	/**
	 * Partially updates an item
	 */
	@Patch("/:id")
	public async patchItem(@Path() id: string | number, @Body() body: any): Promise<any> {
		return await itemsService.patch(id, body);
	}

	/**
	 * Retrieves general information about an item
	 */
	@Get("/:id/general")
	public async getGeneral(@Path() id: string | number): Promise<any> {
		return await itemsService.getGeneral(id);
	}

	/**
	 * Retrieves photos for an item
	 */
	@Get("/:id/photos")
	public async getPhotos(@Path() id: string | number): Promise<any[]> {
		const data = await itemsService.getPhotos(id);
		return Array.isArray(data) ? data : [data];
	}
}
