/**
 * 合同模板字段口径：
 * - contractName：合同名称（用户自定义文本）
 * - contractType：类型枚举（合同 / 授权委托书 / 转三方协议 / 其他）
 */

export var CONTRACT_TYPE_ENUM_OPTIONS = ['合同', '授权委托书', '转三方协议', '其他'];

export var DEFAULT_DOCUMENT_CONTRACT_TYPE = '合同';

export function isDocumentContractTypeEnum(value) {
	return CONTRACT_TYPE_ENUM_OPTIONS.indexOf(String(value || '').trim()) >= 0;
}

export function normalizeContractName(value) {
	return String(value || '').trim();
}

export function normalizeDocumentContractType(value) {
	var text = String(value || '').trim();
	return isDocumentContractTypeEnum(text) ? text : DEFAULT_DOCUMENT_CONTRACT_TYPE;
}

export function getContractNameLabel(value) {
	var text = normalizeContractName(value);
	return text || '—';
}

export function getDocumentContractTypeLabel(value) {
	var text = normalizeDocumentContractType(value);
	return text || '—';
}

/** 无 contractName 时，按文件名推断（兼容旧数据） */
export function inferContractNameFromDoc(doc) {
	if (doc && doc.contractName) return normalizeContractName(doc.contractName);
	var legacy = doc && doc.contractType;
	if (legacy && !isDocumentContractTypeEnum(legacy)) {
		return normalizeContractName(legacy);
	}
	var name = String((doc && (doc.fileName || doc.versionName)) || '');
	return /试用/.test(name) ? '试用合同' : '正式合同';
}

export function resolveContractName(doc) {
	return inferContractNameFromDoc(doc);
}

export function resolveDocumentContractType(doc) {
	if (doc && doc.contractName != null && isDocumentContractTypeEnum(doc.contractType)) {
		return normalizeDocumentContractType(doc.contractType);
	}
	if (doc && isDocumentContractTypeEnum(doc.contractType)) {
		return normalizeDocumentContractType(doc.contractType);
	}
	return DEFAULT_DOCUMENT_CONTRACT_TYPE;
}

/** @deprecated 租赁合同等下游仍按「合同名称」消费，保留别名 */
export function normalizeContractType(value) {
	return normalizeContractName(value);
}

/** @deprecated 保留别名，语义为合同名称 */
export function getContractTypeLabel(value) {
	return getContractNameLabel(value);
}

/** @deprecated 保留别名，语义为合同名称 */
export function resolveContractType(doc) {
	return resolveContractName(doc);
}

export function getDocumentContractTypeSelectOptions() {
	return CONTRACT_TYPE_ENUM_OPTIONS.map(function (value) {
		return { value: value, label: value };
	});
}
