<template>
	<div :class="$style.tabs">
		<div
			:class="{ [$style.activeTab]: value === 'params' }"
			@click="() => handleTabClick('params')"
		>
			{{ $locale.baseText('nodeSettings.parameters') }}
		</div>

		<a
			v-if="documentationUrl"
			target="_blank"
			:href="documentationUrl"
			:class="$style.docsTab"
			@click="onDocumentationUrlClick"
		>
			<div>
				{{ $locale.baseText('nodeSettings.docs') }}
				<font-awesome-icon :class="$style.external" icon="external-link-alt" size="sm" />
			</div>
		</a>

		<div
			:class="{ [$style.settingsTab]: true, [$style.activeTab]: value === 'settings' }"
			@click="() => handleTabClick('settings')"
		>
			<font-awesome-icon icon="cog" />
		</div>
	</div>
</template>

<script lang="ts">
import { externalHooks } from '@/components/mixins/externalHooks';
import { INodeTypeDescription } from 'n8n-workflow';

import mixins from 'vue-typed-mixins';

export default mixins(
	externalHooks,
).extend({
	name: 'NodeTabs',
	props: {
		value: {
			type: String,
		},
		nodeType: {
		},
	},
	computed: {
		documentationUrl (): string {
			const nodeType = this.nodeType as INodeTypeDescription | null;
			if (!nodeType) {
				return '';
			}

			if (nodeType.documentationUrl && nodeType.documentationUrl.startsWith('http')) {
				return nodeType.documentationUrl;
			}

			if (nodeType.documentationUrl || (nodeType.name && nodeType.name.startsWith('n8n-nodes-base'))) {
				return 'https://docs.n8n.io/nodes/' + (nodeType.documentationUrl || nodeType.name) + '?utm_source=n8n_app&utm_medium=node_settings_modal-credential_link&utm_campaign=' + nodeType.name;
			}

			return '';
		},
	},
	methods: {
		onDocumentationUrlClick () {
			if (this.nodeType) {
				this.$externalHooks().run('dataDisplay.onDocumentationUrlClick', { nodeType: this.nodeType as INodeTypeDescription, documentationUrl: this.documentationUrl });
			}
		},
		handleTabClick(tab: string) {
			this.$emit('input', tab);
			if(tab === 'settings' && this.nodeType) {
				this.$telemetry.track('User viewed node settings', { node_type: (this.nodeType as INodeTypeDescription).name, workflow_id: this.$store.getters.workflowId });
			}
		},
	},
});
</script>


<style lang="scss" module>
.tabs {
	color: var(--color-text-base);
	font-weight: var(--font-weight-bold);
	display: flex;
	width: 100%;

	> * {
		padding: 0 var(--spacing-s) var(--spacing-2xs) var(--spacing-s);
		padding-bottom: var(--spacing-2xs);
		font-size: var(--font-size-s);
		cursor: pointer;
		&:hover {
			color: var(--color-primary);
		}
	}
}

.activeTab {
	color: var(--color-primary);
	border-bottom: var(--color-primary) 2px solid;
}

.settingsTab {
	margin-left: auto;
}

.docsTab {
	cursor: pointer;
	color: var(--color-text-base);

	&:hover {
		color: var(--color-primary);

		.external {
			display: inline-block;
		}
	}
}

.external {
	display: none;
}

</style>