type TOptions = Record<string, unknown>;

export function interpolate(template: string, options?: TOptions): string {
    if (!options) {
        return template;
    }

    return template.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*\}\}/g, (_match, key: string) => {
        const value = options[key];

        return value == null ? '' : String(value);
    });
}

export function resolveKeyPath(obj: Record<string, unknown>, key: string): string | undefined {
    const parts = key.split('.');
    let cursor: unknown = obj;

    for (const part of parts) {
        if (cursor == null || typeof cursor !== 'object') {
            return undefined;
        }

        cursor = (cursor as Record<string, unknown>)[part];
    }

    return typeof cursor === 'string' ? cursor : undefined;
}
