import {ItemsResult, Summary} from "../types/types";
import NumberFormatter from "./NumberFormatter";

export default  class ItemsFormatter {

    public static formatSummary(result: ItemsResult) {
        let str = ''
        if (result.summary.members.length > 1) {
            str += result.summary.members.reduce((sum, member, ind) => {
                sum += `${ind + 1}. ${member.username ? member.username + ': ' : ''}  <b>${NumberFormatter.format(member.total)}</b> \n`;
                return sum;
            }, str);
        } else {
            str += result.summary.inputText || ''
        }
        str += `\n-------------\nJami: <b>${NumberFormatter.format(result.summary.total)}</b> `;
        if (result.summary.membersCount > 1) {
            str += `(${result.summary.membersCount} kishi)`
        }

        return str;
    }

    public static calcAndFormatMathJs(text: string) {
        const total = NumberFormatter.evaluateAndRound(text)
        const formattedInput = text.replace(/([+\-])/g, ' $1 ')
        return {
            total,
            formatted: `${formattedInput}\n-------------\nJami: <b>${NumberFormatter.format(total)}</b> `
        }
    }

    public static formatDetailedSummary(summary: Summary, text: string) {
        let result = summary.members.reduce((sum, member, ind) => {
            sum += `${ind + 1}. ${member.username || ''}  <b>${NumberFormatter.format(member.total)}</b>
<code>${member.productNames?.join(', ')}</code>\n
`;
            return sum;
        }, '');
        result += `-------------\nJami: <b>${NumberFormatter.format(summary.total)}</b> (${summary.membersCount} kishi)
  \n\nOriginal text:\n<pre>${text}</pre>
  `;
        return result;
    }

}