import { NodeAppDetails } from "./node-app";
import { NodeGatewayHttpsDetails } from "./node-gateway-https";
import { AppNode } from "@/lib/state";
import { NodeVolumeDetails } from "./node-volume";
import { NodePostgreSQLDetails } from "./node-postgresql";
import { NodeMongoDBDetails } from "./node-mongodb";
import { NodeGithubDetails } from "./node-github";
import { NodeGatewayTCPDetails } from "./node-gateway-tcp";

type NodeDetailsProps = AppNode & {
	disabled?: boolean;
};

export function NodeDetails(props: NodeDetailsProps) {
	return (
		<div className="px-1 flex flex-col gap-2">
			<NodeDetailsImpl {...props} />
		</div>
	);
}

function NodeDetailsImpl(props: NodeDetailsProps) {
	switch (props.type) {
		case "app":
			return <NodeAppDetails node={props} disabled={props.disabled} />;
		case "gateway-https":
			return <NodeGatewayHttpsDetails {...props} />;
		case "gateway-tcp":
			return <NodeGatewayTCPDetails {...props} />;
		case "volume":
			return <NodeVolumeDetails {...props} />;
		case "postgresql":
			return <NodePostgreSQLDetails {...props} />;
		case "mongodb":
			return <NodeMongoDBDetails {...props} />;
		case "github":
			return <NodeGithubDetails {...props} />;
		default:
			return <>nooo</>;
	}
}
