export interface ParsedTask {
    title: string;
    priority?: 'low' | 'medium' | 'high';
    dueDate?: Date;
    labelName?: string;
}

export const parseTaskInput = (input: string): ParsedTask => {
    let title = input;
    let priority: ParsedTask['priority'] | undefined;
    let dueDate: Date | undefined;
    let labelName: string | undefined;

    // Parse Priority (!high, !medium, !low)
    const priorityMatch = title.match(/!(high|medium|low)/i);
    if (priorityMatch) {
        priority = priorityMatch[1].toLowerCase() as ParsedTask['priority'];
        title = title.replace(priorityMatch[0], '').trim();
    }

    // Parse Label (#work, #personal)
    const labelMatch = title.match(/#(\w+)/);
    if (labelMatch) {
        labelName = labelMatch[1];
        title = title.replace(labelMatch[0], '').trim();
    }

    // Parse Date (tomorrow, today, next friday) - Simple heuristic
    // Note: For production capability, use 'chrono-node'
    const today = new Date();
    const tomorrow = new Date(today);
    tomorrow.setDate(tomorrow.getDate() + 1);

    const matchTomorrow = title.match(/\b(tomorrow|morgen)\b/i);
    const matchToday = title.match(/\b(today|heute)\b/i);
    const matchNextWeek = title.match(/\b(next week|nächste woche)\b/i);

    if (matchTomorrow) {
        dueDate = tomorrow;
        title = title.replace(matchTomorrow[0], '').trim();
    } else if (matchToday) {
        dueDate = today;
        title = title.replace(matchToday[0], '').trim();
    } else if (matchNextWeek) {
        const nextWeek = new Date(today);
        nextWeek.setDate(today.getDate() + 7);
        dueDate = nextWeek;
        title = title.replace(matchNextWeek[0], '').trim();
    }

    return {
        title,
        priority,
        dueDate,
        labelName
    };
};
