/* 
┌───────────────────────────────────────────────────────────────┐
│ Script quản lý tài chính bằng tiếng Việt tự nhiên trên Fibery │
└───────────────────────────────────────────────────────────────┘
• Ở thẻ Actions chọn Created và Updated, với field là Name như hình: https://i.imgur.com/8iVGxfO.png
• Chỉnh sửa danhSáchLoạiChiTiêu và danhSáchPhươngThức theo nhu cầu của bạn
• Số tiền sẽ là các số có đuôi là tr, k, đ, d. Nếu có nhiều giá trị thì sẽ chọn giá trị đứng đằng sau dấu bằng ('='). Dấu thập phân là dấu chấm ('.'). Bạn có thể dùng dấu phẩy để dễ đọc. Nó sẽ được bỏ đi. Ví dụ: 1.2tr, 3,400k, 123,456,700đ, 123,456,700d.
• Nếu kết quả ra -1 nghĩa là có vấn đề
• Để kiểm tra kết quả tính toán, vào thẻ Activity


Viết bởi Quả Cầu.
*/

const fibery = context.getService('fibery');
const danhSáchLoạiChiTiêu = {
    "đi chợ": "Cần thiết",
    "khám": "Y tế",
    "đáo": "Trả nợ",
}
const danhSáchMãLoạiChiTiêu = Object.keys(danhSáchLoạiChiTiêu)
function lấyLoạiChiTiêu(input) {
    for (const mãLoạiChiTiêu of danhSáchMãLoạiChiTiêu) {
        if (input.includes(mãLoạiChiTiêu)) {
            console.log("mãLoạiChiTiêu:", mãLoạiChiTiêu)
            return danhSáchLoạiChiTiêu[mãLoạiChiTiêu]
        }
    }
    return 'Khác'
}

const danhSáchPhươngThức = {
    "ck vcb": "Tài khoản vcb",
    "ck vcb vợ em": "tài khoản vcb nợn",
    "charged thẻ shinhan": "tài khoản shinhan kendy",
    "momo": "tài khoản momo",
    "nợn trả": "cash vợ em",
}
const danhSáchMãPhươngThức = Object.keys(danhSáchPhươngThức)
function lấyPhươngThức(input) {
    for (const mãPhươngThức of danhSáchMãPhươngThức) {
        if (input.includes(mãPhươngThức)) {
            console.log("mãPhươngThức:", mãPhươngThức)
            return danhSáchPhươngThức[mãPhươngThức]
        }
    }
    return 'Tiền mặt'
}
const regexSốTiền = /(=|= )?(\d|,|\.)+(k|tr|d|đ)\b/g //kiếm tất cả các số có tận cùng là tr, k , d, đ. Giữa các số đó có thể có dấu chấm hoặc dấu phẩy. Trước các con số đó có thể có dấu bằng.
function lấySốTiền(input) {
    const kếtQuảKiếm = input.match(regexSốTiền)
    console.log("kếtQuảKiếm:", kếtQuảKiếm);
    console.log("kếtQuảKiếm.filter(kếtQuả => kếtQuả.includes('=')):", kếtQuảKiếm.filter(kếtQuả => kếtQuả.includes('=')))
    
    // Nếu kếtQuảKiếm chỉ có 1 kết quả, thì đó chính là con số mình cần. Nếu có nhiều hơn 1, thì lấy kết quả có chứa dấu '='
    if (kếtQuảKiếm.length == 1) {
        var tổngTrướcKhiĐịnhDạng = kếtQuảKiếm[0];
    } else if (kếtQuảKiếm.join().includes('=')) {
        var tổngTrướcKhiĐịnhDạng = kếtQuảKiếm.filter(kếtQuả => kếtQuả.includes('='))[0].replace('=', '');
    } else {
        return -1
    }
    console.log("Tổng trước khi định dạng:", tổngTrướcKhiĐịnhDạng);

    const giáTrịCủaTổng = parseFloat(tổngTrướcKhiĐịnhDạng.replace(/k|tr|d|đ|,/, ''))
    console.log("Giá trị của tổng:", giáTrịCủaTổng);

    if (tổngTrướcKhiĐịnhDạng.includes('tr')) {
        var tổngSauKhiĐịnhDạng = giáTrịCủaTổng * 1000000
    } else if (tổngTrướcKhiĐịnhDạng.includes('k')) {
        var tổngSauKhiĐịnhDạng = giáTrịCủaTổng * 1000
    } else {
        var tổngSauKhiĐịnhDạng = giáTrịCủaTổng
    }

    console.log("Tổng sau khi định dạng:", tổngSauKhiĐịnhDạng);
    return tổngSauKhiĐịnhDạng
}

for (const entity of args.currentEntities) {
    const input = entity['Name'];
    console.log("Name: ", input);

    const sốTiền = lấySốTiền(input)
    const loạiChiTiêu = lấyLoạiChiTiêu(input)
    const phươngThức = lấyPhươngThức(input)

    await fibery.updateEntity(entity.type, entity.id, {
        'Số tiền': sốTiền,
        'Loại chi tiêu': loạiChiTiêu,
        'Phương thức': phươngThức
    });

    console.log("Loại chi tiêu: ", loạiChiTiêu);
    console.log("Phương thức: ", phươngThức);
    console.log("Số tiền: ", sốTiền);
}