/**
 * Per-type content-tab descriptors for the service page skeleton.
 *
 * Each entry names a tab and its component. The service page renders
 * `[Overview, ...contentTabs(type), Widgets, Config]`.
 */
import type { ComponentType } from "react";
import type { ServiceInstance } from "../../types";
import { OverviewTab } from "./OverviewTab";
import { AlertsTab } from "./AlertsTab";
import { MetricsTab } from "./MetricsTab";
import { MediaTab } from "./MediaTab";
import { RequestsTab } from "./RequestsTab";
import { FilesTab } from "./FilesTab";
import { ActionsTab } from "./ActionsTab";
import { JobsTab } from "./JobsTab";
import { UsersTab } from "./UsersTab";
import { MessagingTab } from "./MessagingTab";

export type ServiceTabComponent = ComponentType<{ instance: ServiceInstance }>;

export interface ContentTab {
	label: string;
	Component: ServiceTabComponent;
}

/** Overview tab (shared across all service types). */
export const OVERVIEW_TAB: ContentTab = {
	label: "Overview",
	Component: OverviewTab,
};

/**
 * Returns the type-specific content tabs for a service type.
 * Types with no operational content return `[]` (only Overview + Widgets + Config).
 */
export function serviceContentTabs(serviceType: string): ContentTab[] {
	switch (serviceType) {
		case "jellyfin":
			return [
				{ label: "Media", Component: MediaTab },
				{ label: "Requests", Component: RequestsTab },
			];
		case "ssh_tasks":
			return [
				{ label: "Files", Component: FilesTab },
				{ label: "Actions", Component: ActionsTab },
			];
		case "backups":
			return [{ label: "Jobs", Component: JobsTab }];
		case "authentik":
			return [
				{ label: "Users", Component: UsersTab },
				{ label: "Messaging", Component: MessagingTab },
			];
		case "alertmanager":
			return [{ label: "Alerts", Component: AlertsTab }];
		case "prometheus":
			return [{ label: "Metrics", Component: MetricsTab }];
		default:
			return [];
	}
}
