import * as m from '$lib/paraglide/messages.js';
import type { components } from '$lib/generated/api';

type RelationshipDTO = components['schemas']['RelationshipDTO'];

export function chipLabel(rel: RelationshipDTO, perspectivePersonId: string): string {
	const viewpointIsSubject = rel.personId === perspectivePersonId;
	switch (rel.relationType) {
		case 'PARENT_OF':
			return viewpointIsSubject ? m.relation_parent_of() : m.relation_child_of();
		case 'SPOUSE_OF':
			return m.relation_spouse_of();
		case 'SIBLING_OF':
			return m.relation_sibling_of();
		case 'FRIEND':
			return m.relation_friend();
		case 'COLLEAGUE':
			return m.relation_colleague();
		case 'EMPLOYER':
			return m.relation_employer();
		case 'DOCTOR':
			return m.relation_doctor();
		case 'NEIGHBOR':
			return m.relation_neighbor();
		default:
			return m.relation_other();
	}
}

export function otherName(rel: RelationshipDTO, perspectivePersonId: string): string {
	return rel.personId === perspectivePersonId
		? rel.relatedPersonDisplayName
		: rel.personDisplayName;
}

/**
 * Maps a backend inferred-label key (parent, uncle_aunt, ...) to its
 * localised string. Unknown keys fall back to "distant".
 */
export function inferredRelationshipLabel(key: string): string {
	switch (key) {
		case 'parent':
			return m.relation_inferred_parent();
		case 'child':
			return m.relation_inferred_child();
		case 'spouse':
			return m.relation_inferred_spouse();
		case 'sibling':
			return m.relation_inferred_sibling();
		case 'grandparent':
			return m.relation_inferred_grandparent();
		case 'grandchild':
			return m.relation_inferred_grandchild();
		case 'great_grandparent':
			return m.relation_inferred_great_grandparent();
		case 'great_grandchild':
			return m.relation_inferred_great_grandchild();
		case 'uncle_aunt':
			return m.relation_inferred_uncle_aunt();
		case 'niece_nephew':
			return m.relation_inferred_niece_nephew();
		case 'great_uncle_aunt':
			return m.relation_inferred_great_uncle_aunt();
		case 'great_niece_nephew':
			return m.relation_inferred_great_niece_nephew();
		case 'inlaw_parent':
			return m.relation_inferred_inlaw_parent();
		case 'inlaw_child':
			return m.relation_inferred_inlaw_child();
		case 'sibling_inlaw':
			return m.relation_inferred_sibling_inlaw();
		case 'cousin_1':
			return m.relation_inferred_cousin_1();
		default:
			return m.relation_inferred_distant();
	}
}
