export interface PromptPart {
    id: string;
    content: string;
    isPlaceholder?: boolean;
}


export interface ParsedQuestion {
    id: string;
    parts: PromptPart[];
    editingPlaceholders: boolean;
}

const parseLine = (line: string): PromptPart[] => {
    const parts: PromptPart[] = [];
    let lastIndex = 0;
    const regex = /{{(\d+)}}/g;
    let match;

    while ((match = regex.exec(line)) !== null) {
        if (match.index > lastIndex) {
            const textBefore = line.slice(lastIndex, match.index);
            const words = textBefore.split(/(\s+)/).filter(Boolean);
            words.forEach(word => {
                parts.push({
                    id: `text-${Date.now()}-${parts.length}`,
                    content: word
                });
            });
        }
        
        const placeholderId = match[1];
        parts.push({
            id: placeholderId,
            content: match[0],
            isPlaceholder: true
        });
        
        lastIndex = match.index + match[0].length;
    }
    
    if (lastIndex < line.length) {
        const textAfter = line.slice(lastIndex);
        const words = textAfter.split(/(\s+)/).filter(Boolean);
        words.forEach(word => {
            parts.push({
                id: `text-${Date.now()}-${parts.length}`,
                content: word
            });
        });
    }
    
    return parts;
};

const reconstructLine = (parts: PromptPart[]): string => {
    const text = parts
        .map(part => part.content)
        .join(' ')
        .replace(/\s+/g, ' ')
        .trim();
    return text;
};


const formatDisplayContent = (content: string): string => {
    return content.replace(/{{(\d+)}}/g, '[$1]');
};

const formatStorageContent = (content: string): string => {
    return content.replace(/\[(\d+)\]/g, '{{$1}}');
};

export {
    parseLine,
    reconstructLine,
    formatDisplayContent,
    formatStorageContent
}
