import "reflect-metadata";
import { Controller, Get, Query, Route } from "@tsoa/runtime";
import sourcesService from "~/services/sources";

interface SourceItem {
	id: number;
	name: string;
	[key: string]: any;
}

interface SourceListResponse {
	data: SourceItem[];
	total?: number;
}

@Route("source")
export class SourcesController extends Controller {
	/**
	 * Retrieves a list of all sources
	 * @param page Optional page number for pagination
	 */
	@Get()
	public async getList(@Query() page?: number): Promise<SourceListResponse> {
		try {
			const data = await sourcesService.getList(page);
			return {
				data: Array.isArray(data) ? data : [data],
				total: Array.isArray(data) ? data.length : 1,
			};
		} catch (err) {
			this.setStatus(500);
			throw err;
		}
	}
}
