import { BaseAsset } from "@apic/studio-client-model";
import { isNullOrUndefined } from "./data.helper.js";
import { AppConstants } from "../constants/app.constants.js";
import { getDocumentBasedOnLanguage } from "./data.parser.js";

function isBaseAsset(fileContent: string, language: string): boolean {
	const parsedYaml: BaseAsset = getDocumentBasedOnLanguage(fileContent, language);
	return !!parsedYaml?.kind;
}
function getBaseAsset(fileContent: string, language: string): string {
	const parsedYaml: BaseAsset = getDocumentBasedOnLanguage(fileContent, language);
	return parsedYaml.kind.toLowerCase();
}

function isValidAssetRefValue(assetRefValue: string): boolean {
	if (isNullOrUndefined(assetRefValue)) {
		return false;
	}
	return (
		assetRefValue.split(AppConstants.COLON).length >= 1 &&
		assetRefValue.split(AppConstants.COLON).length <= 3
	);
};

function isValidAsset(asset: BaseAsset | null | undefined, checkForVersion: boolean): boolean {
	if (isNullOrUndefined(asset)) {
		return false;
	}
	asset = asset as BaseAsset;
	return !isNullOrUndefined(asset.kind) &&
		!isNullOrUndefined(asset.metadata) &&
		!isNullOrUndefined(asset.metadata.name) &&
		(!checkForVersion || !isNullOrUndefined(asset.metadata.version));
}

function isValidAssetFileName(filename: string) {
	return filename.endsWith('.yaml') || filename.endsWith('.yml') || filename.endsWith('.json');
}

export { isBaseAsset, isValidAssetFileName, isValidAsset, isValidAssetRefValue, getBaseAsset };