import requests, json
import sys

class locgo:
    def __init__(self):
        pass
        
    def Info(self):
        try:
            response= requests.post('https://www.locgoh5.top/vn-app-server/app/v1/user/personalHomepage',headers = self.headers, json={}).json()
            print(f"{'Tên':<12}: {response['data']['nickName']}")
            print(f"{'Bảo lãnh':<12}: {response['data']['avlBalance']:,.0f}")
            print(f"{'Số dư':<12}: {response['data']['freezeBalance']:,.0f}")
            print(f"{'Lợi nhuận':<12}: {response['data']['income']:,.0f}")
            print(f"{'Tổng tiền':<12}: {response['data']['totalBalance']:,.0f}")
            print(f"{'Bank':<12}: {response['data']['smsPhone']}")
            print('-'*15)
        except:
            print('loi')
        
    def listbank(self):
        self.listso = []
        
        response= requests.post('https://www.locgoh5.top/vn-app-server/app/v1/user-phone/page',headers = self.headers, json={}).json()['data']['list']
        for i in response:
            print(f"{'Tài Khoản':<15}: {i['phone']}")
            print(f"{'Nhân Hàng':<15}: {i['associatedBank']}")
            print(f"{'Thu Nhập':<15}: {i['dayIncome']:,.0f}")
            print(f"{'Đơn Nhận':<15}: {i['dayDsOrderQty']}")
            print(f"{'Đơn Thanh Toán':<15}: {i['dayDfOrderQty']}")
            print(f"{'Số Dư ':<15}: {i['actualBalance']:,.0f}")
            a = 99
            b = 99
            if i['phone'] in self.lsgd.keys():
                a = self.lsgd[i['phone']]['nhan']
                b = self.lsgd[i['phone']]['rut']
                
            print(f"{'Đơn Nhận':<15}: {a} Phút Trước")
            print(f"{'Đơn Thanh Toán':<15}: {b} Phút Trước")
            print('='*17)
        
    def lsgdd(self):
        from datetime import datetime, timedelta

        result = {}
        now = datetime.now()
        response= requests.post('https://www.locgoh5.top/vn-app-server/app/v1/order/searchOrder',headers = self.headers, json={"groupBy":"","orderBy":"","orderByType":"","pageNum":1,"pageSize":20,"orderType":None,"orderOrigin":1,"platformOrderNo":"","startTime":"","endTime":""}).json()['data']['list']
        for item in response[::-1]:
            phone = item['phone']
                
            order_time = datetime.strptime(item['orderTime'], "%Y-%m-%d %H:%M:%S")
            order_time_real = order_time - timedelta(hours=1)
            minutes_ago = int((now - order_time_real).total_seconds() / 60)

            if phone not in result:
                result[phone] = {'nhan': 99, 'rut': 99}
                
            if item['orderTypeName'] == 'Đơn thu tiền':
                result[phone]['nhan'] = minutes_ago
            elif item['orderTypeName'] == 'Đơn rút tiền':
                result[phone]['rut'] = minutes_ago
        
        self.lsgd = result

    def run(self):
        # 👉 mở file ghi
        old_stdout = sys.stdout
        f = open("moi.txt", "w", encoding="utf-8")
        sys.stdout = f

        list_authorization = """Bearer_eyJ0eXBlIjoiSldUIiwiYWxnIjoiSFM1MTIifQ.eyJqdGkiOiJyUVJrJHlOOjclKkJ3fUwtVU5ILVBPPVdFVy1YRi1dTX40Izt5R2E6YV9GeyIsImlzcyI6InBheW1lbnQiLCJwaG9uZSI6IjU2OTI1NTc3OCIsInVzZXJObyI6IkFVTjAwMDAwMDAwMDAwMDU4NiIsImxvZ2luTmFtZSI6ImJvbmdvYzIiLCJpZCI6NTU5LCJwYXlDb2RlIjoiVk4iLCJkZXZpY2VJZCI6IkNSODJDWU03OFZCTSIsImludml0YXRpb25Db2RlIjoiQ0xTUUdHIiwic3ViIjoiQVVOMDAwMDAwMDAwMDAwNTg2IiwiaWF0IjoxNzc4NDIzMTA0LCJleHAiOjE4MDk5NTkxMDR9.2NMtO4R_FDqd7Ii5JavbTtOTX5BZVq2qB3N-mHNeVwepbg-4jX9QZ-tM7qnMpu6aSKbE7_fXV6RO12gL2Q8Obg|CR82CYM78VBM
Bearer_eyJ0eXBlIjoiSldUIiwiYWxnIjoiSFM1MTIifQ.eyJqdGkiOiJyUVJrJHlOOjclKkJ3fUwtVU5ILVBPPVdFVy1YRi1dTX40Izt5R2E6YV9GeyIsImlzcyI6InBheW1lbnQiLCJwaG9uZSI6IjU2OTI1NTc4MSIsInVzZXJObyI6IkFVTjAwMDAwMDAwMDAwMDcxOSIsImxvZ2luTmFtZSI6IlBow6BtIiwiaWQiOjY5MSwicGF5Q29kZSI6IlZOIiwiZGV2aWNlSWQiOiJDUjgyQ1lYMVMwOFkiLCJpbnZpdGF0aW9uQ29kZSI6IkNMMjhJSCIsInN1YiI6IkFVTjAwMDAwMDAwMDAwMDcxOSIsImlhdCI6MTc3ODQyMzEwNCwiZXhwIjoxODA5OTU5MTA0fQ.jy7SffpBD1XEr_aU4K7IHPLVDDXcN2yhrQVxqvg6TPM0GOxNqut2US0cH_xn0sy5RWVNM_b8nPrRb_ASYna6Eg|CR82CYX1S08Y
Bearer_eyJ0eXBlIjoiSldUIiwiYWxnIjoiSFM1MTIifQ.eyJqdGkiOiJyUVJrJHlOOjclKkJ3fUwtVU5ILVBPPVdFVy1YRi1dTX40Izt5R2E6YV9GeyIsImlzcyI6InBheW1lbnQiLCJwaG9uZSI6IjU2OTI1NTc4MiIsInVzZXJObyI6IkFVTjAwMDAwMDAwMDAwMDc2NiIsImxvZ2luTmFtZSI6ImPhurdjIiwiaWQiOjczOCwicGF5Q29kZSI6IlZOIiwiZGV2aWNlSWQiOiJDUjgyQ1k4MlVWN00iLCJpbnZpdGF0aW9uQ29kZSI6IkNMN0lXVSIsInN1YiI6IkFVTjAwMDAwMDAwMDAwMDc2NiIsImlhdCI6MTc3ODQyMzEwNCwiZXhwIjoxODA5OTU5MTA0fQ.fzJgJZKbMv3fhmUXrz9QKGRYFGJrmknUIi0qqz-CvsmsOPKf1Kn7V8N2H8j6PE6TpkCiUUt8HECpokcm-50qsg|CR82CY82UV7M
Bearer_eyJ0eXBlIjoiSldUIiwiYWxnIjoiSFM1MTIifQ.eyJqdGkiOiJyUVJrJHlOOjclKkJ3fUwtVU5ILVBPPVdFVy1YRi1dTX40Izt5R2E6YV9GeyIsImlzcyI6InBheW1lbnQiLCJwaG9uZSI6IjU2OTI1NTc4NCIsInVzZXJObyI6IkFVTjAwMDAwMDAwMDAwMDg0MCIsImxvZ2luTmFtZSI6IkNhYyBjaG8iLCJpZCI6ODEyLCJwYXlDb2RlIjoiVk4iLCJkZXZpY2VJZCI6IkNSODJDWkxBQzAxVSIsImludml0YXRpb25Db2RlIjoiQ01ES1JJIiwic3ViIjoiQVVOMDAwMDAwMDAwMDAwODQwIiwiaWF0IjoxNzc4NDIzMTA0LCJleHAiOjE4MDk5NTkxMDR9.BSaAOviEFjqVdqwk7u5hmDAHXDdYBDEebI0dRtWqP8-u_k3_2e6cANMGGm2JzF3oLwRm435Bv5HFOCCl2Oqyhw|CR82CZLAC01U
Bearer_eyJ0eXBlIjoiSldUIiwiYWxnIjoiSFM1MTIifQ.eyJqdGkiOiJyUVJrJHlOOjclKkJ3fUwtVU5ILVBPPVdFVy1YRi1dTX40Izt5R2E6YV9GeyIsImlzcyI6InBheW1lbnQiLCJwaG9uZSI6IjU2OTI1NTc4NSIsInVzZXJObyI6IkFVTjAwMDAwMDAwMDAwMTIzMSIsImxvZ2luTmFtZSI6Ik9rIiwiaWQiOjExOTksInBheUNvZGUiOiJWTiIsImRldmljZUlkIjoiQ1I4MkNaVk9YU1dJIiwiaW52aXRhdGlvbkNvZGUiOiJDTkNCNVEiLCJzdWIiOiJBVU4wMDAwMDAwMDAwMDEyMzEiLCJpYXQiOjE3Nzg0MjMxMDUsImV4cCI6MTgwOTk1OTEwNX0.FSt7f01UwtL-54w6AAbYcTMj8YmvtR0Swt7YYP6C7iCAMpYwg3OaKJsbK0DNYA9finhf-mr6VPTFTxdIPFYIqA|CR82CZVOXSWI
Bearer_eyJ0eXBlIjoiSldUIiwiYWxnIjoiSFM1MTIifQ.eyJqdGkiOiJyUVJrJHlOOjclKkJ3fUwtVU5ILVBPPVdFVy1YRi1dTX40Izt5R2E6YV9GeyIsImlzcyI6InBheW1lbnQiLCJwaG9uZSI6IjU2OTI1NTc4NiIsInVzZXJObyI6IkFVTjAwMDAwMDAwMDAwMTIzMiIsImxvZ2luTmFtZSI6Ik9rIiwiaWQiOjEyMDAsInBheUNvZGUiOiJWTiIsImRldmljZUlkIjoiQ1I4MkNaNUwxQUIyIiwiaW52aXRhdGlvbkNvZGUiOiJDTkNINVAiLCJzdWIiOiJBVU4wMDAwMDAwMDAwMDEyMzIiLCJpYXQiOjE3Nzg0MjMxMDUsImV4cCI6MTgwOTk1OTEwNX0.dbITOwTnLgXv_tbCOTBRCprNsmOJODaXql-NNIJq-MuwoNyB3Tnd0ujnojvx4DaeJdwV9tuXHy_9_uw9gjnsGg|CR82CZ5L1AB2
Bearer_eyJ0eXBlIjoiSldUIiwiYWxnIjoiSFM1MTIifQ.eyJqdGkiOiJyUVJrJHlOOjclKkJ3fUwtVU5ILVBPPVdFVy1YRi1dTX40Izt5R2E6YV9GeyIsImlzcyI6InBheW1lbnQiLCJwaG9uZSI6IjU2OTI1NTc4OCIsInVzZXJObyI6IkFVTjAwMDAwMDAwMDAwMTQ4MSIsImxvZ2luTmFtZSI6Ik9rdmlwICIsImlkIjoxNDQ5LCJwYXlDb2RlIjoiVk4iLCJkZXZpY2VJZCI6IkNSODJDMEc0S0ZQVSIsImludml0YXRpb25Db2RlIjoiQ05SMTdJIiwic3ViIjoiQVVOMDAwMDAwMDAwMDAxNDgxIiwiaWF0IjoxNzc4NDIzMTA1LCJleHAiOjE4MDk5NTkxMDV9.H1JcspJjX8MRThmDU4AKJAO2I82DlHGycX_1dflt78Sjg8YP2kWOxiNEQgx34CFYylDlQhL-awg87ETooiOwtQ|CR82C0G4KFPU
Bearer_eyJ0eXBlIjoiSldUIiwiYWxnIjoiSFM1MTIifQ.eyJqdGkiOiJyUVJrJHlOOjclKkJ3fUwtVU5ILVBPPVdFVy1YRi1dTX40Izt5R2E6YV9GeyIsImlzcyI6InBheW1lbnQiLCJwaG9uZSI6IjU2OTI1NTc4OSIsInVzZXJObyI6IkFVTjAwMDAwMDAwMDAwMTUzMyIsImxvZ2luTmFtZSI6IkN1IiwiaWQiOjE1MDEsInBheUNvZGUiOiJWTiIsImRldmljZUlkIjoiQ1I4MkMwU0MzWlBVIiwiaW52aXRhdGlvbkNvZGUiOiJDTllCVjgiLCJzdWIiOiJBVU4wMDAwMDAwMDAwMDE1MzMiLCJpYXQiOjE3Nzg0MjMxMDUsImV4cCI6MTgwOTk1OTEwNX0.9CApuJ348knWCGsfF6Ih_XNj378jkh9phBP2SdW558VnP4-7mHCormnifqzFRUQ2dW1ZoB98A6xXLF46GakWEA|CR82C0SC3ZPU
Bearer_eyJ0eXBlIjoiSldUIiwiYWxnIjoiSFM1MTIifQ.eyJqdGkiOiJyUVJrJHlOOjclKkJ3fUwtVU5ILVBPPVdFVy1YRi1dTX40Izt5R2E6YV9GeyIsImlzcyI6InBheW1lbnQiLCJwaG9uZSI6IjU2OTI1NTc5MCIsInVzZXJObyI6IkFVTjAwMDAwMDAwMDAwMTYwNiIsImxvZ2luTmFtZSI6Im5vbmdvYzMiLCJpZCI6MTU3NCwicGF5Q29kZSI6IlZOIiwiZGV2aWNlSWQiOiJDUjgyQzA1QjIwQ1kiLCJpbnZpdGF0aW9uQ29kZSI6IkNONDkyNSIsInN1YiI6IkFVTjAwMDAwMDAwMDAwMTYwNiIsImlhdCI6MTc3ODQyMzEwNSwiZXhwIjoxODA5OTU5MTA1fQ.ZMnC9oCaszsuw65piCwiQeQQwPpvBMOvcpAaBY515NccbA1KY0J37uE8AWSig7kmHE_UZ-ivetaWYwBYO4djvQ|CR82C05B20CY""".split('\n')
        
        for i in list_authorization:
            self.headers ={
                "content-length": "2",
                "sec-ch-ua-platform": "\"Android\"",
                "authorization": i.split('|')[0],
                "client-platform": "H5",
                "accept-language": "vi-VN",
                "sec-ch-ua": "\"Google Chrome\";v=\"143\", \"Chromium\";v=\"143\", \"Not A(Brand\";v=\"24\"",
                "sec-ch-ua-mobile": "?1",
                "deviceid": i.split('|')[1],
                "user-agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Mobile Safari/537.36",
                "dnt": "1",
                "request-paycode": "VN",
                "content-type": "application/json",
                "accept": "*/*",
                "origin": "https://h5.locgoh5.top",
                "sec-fetch-site": "same-site",
                "sec-fetch-mode": "cors",
                "sec-fetch-dest": "empty",
                "referer": "https://h5.locgoh5.top/",
                "priority": "u=1, i"
            }

            self.Info()
            self.lsgdd()
            self.listbank()

        # 👉 trả lại stdout
        sys.stdout = old_stdout
        f.close()

locgo().run()

input_file = "moi.txt"
output_file = "moi.html"

def parse_number(value):
    try:
        return int(value.replace(",", "").strip())
    except:
        return 0


def parse_minutes(text):
    try:
        if "Phút" in text:
            return int(text.split()[0])
    except:
        pass
    return 0


def add_key_safe(obj, key, value):
    if key not in obj:
        obj[key] = value
    else:
        new_key = key + " Time"
        i = 2
        while new_key in obj:
            new_key = f"{key} Time {i}"
            i += 1
        obj[new_key] = value


def parse_data(text):
    lines = text.splitlines()
    accounts = []
    current_account = None
    current_bank = None
    in_bank = False

    for line in lines:
        line = line.strip()
        if not line:
            continue

        if line == "---------------":
            in_bank = True
            current_bank = {}
            continue

        if line == "=================":
            if current_bank:
                current_account["banks"].append(current_bank)
                current_bank = {}
            continue

        if ":" in line:
            k, v = line.split(":", 1)
            k, v = k.strip(), v.strip()

            if k == "Tên":
                if current_account:
                    accounts.append(current_account)
                current_account = {"info": {}, "banks": []}
                add_key_safe(current_account["info"], k, v)
                in_bank = False
                continue

            if not current_account:
                continue

            if not in_bank:
                add_key_safe(current_account["info"], k, v)
            else:
                if current_bank is None:
                    current_bank = {}
                add_key_safe(current_bank, k, v)

    if current_bank and current_account:
        current_account["banks"].append(current_bank)
    if current_account:
        accounts.append(current_account)

    return accounts


def format_number(n):
    return f"{n:,}"


def calculate_summary(data):
    total_profit = 0
    total_money = 0
    total_balance = 0
    total_guarantee = 0

    for acc in data:
        info = acc["info"]
        total_profit += parse_number(info.get("Lợi nhuận", "0"))
        total_money += parse_number(info.get("Tổng tiền", "0"))
        total_balance += parse_number(info.get("Số dư", "0"))
        total_guarantee += parse_number(info.get("Bảo lãnh", "0"))

    return {
        "profit": total_profit,
        "money": total_money,
        "balance": total_balance,
        "guarantee": total_guarantee
    }


def generate_html(data):
    labels = []
    profits = []

    for acc in data:
        labels.append(acc["info"].get("Tên", ""))
        profits.append(parse_number(acc["info"].get("Lợi nhuận", "0")))

    summary = calculate_summary(data)

    html = """
<!DOCTYPE html>
<html lang="vi">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="UTF-8">
<title>Dashboard</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>

<style>
body { font-family: Arial; background:#f5f6fa; padding:15px; }
.dark { background:#1e272e; color:white; }

button { padding:10px; margin:5px; border-radius:8px; border:none; font-size:16px; }

input { width:100%; padding:12px; font-size:18px; margin:10px 0; border-radius:10px; }

.account { background:white; padding:15px; margin-bottom:20px; border-radius:12px; }
.dark .account { background:#2f3640; }

.header { font-size:20px; font-weight:bold; }

.grid { display:grid; grid-template-columns:repeat(2,1fr); gap:10px; }

.box { background:#dcdde1; padding:10px; border-radius:8px; }
.dark .box { background:#353b48; }

.bank { margin-top:10px; padding:10px; border-radius:8px; }

.highlight { border:2px solid gold; }
.small { font-size:13px; }
</style>
</head>

<body>

<button onclick="toggleDark()">🌙 Dark</button>
<button onclick="sortData('money')">💰 Tiền</button>
<button onclick="sortData('profit')">📈 Lợi nhuận</button>
<button onclick="sortData('balance')">🏦 Số dư</button>

<input id="search" placeholder="🔍 Tìm theo tên...">
"""

    # SUMMARY
    html += """
<div style="background:#192a56;color:white;padding:20px;border-radius:12px;margin-bottom:15px;text-align:center">
<div style="font-size:20px;">📈 Tổng lợi nhuận</div>
<div style="font-size:32px;font-weight:bold;margin:10px 0;">
""" + format_number(summary["profit"]) + """
</div>

<div style="display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:15px;">
"""

    html += "<div style='background:#273c75;padding:10px;border-radius:8px'>💰<br>" + format_number(summary["money"]) + "</div>"
    html += "<div style='background:#273c75;padding:10px;border-radius:8px'>🏦<br>" + format_number(summary["balance"]) + "</div>"
    html += "<div style='background:#273c75;padding:10px;border-radius:8px'>🔒<br>" + format_number(summary["guarantee"]) + "</div>"

    html += "</div></div>"

    html += """
<canvas id="chart"></canvas>
<div id="list">
"""

    top = sorted(data, key=lambda x: parse_number(x["info"].get("Tổng tiền", "0")), reverse=True)[:3]
    top_names = set(x["info"].get("Tên") for x in top)

    for acc in data:
        info = acc["info"]
        name = info.get("Tên", "")
        money = parse_number(info.get("Tổng tiền", "0"))
        profit = parse_number(info.get("Lợi nhuận", "0"))
        balance = parse_number(info.get("Số dư", "0"))

        cls = "account highlight" if name in top_names else "account"

        html += '<div class="%s" data-name="%s" data-money="%d" data-profit="%d" data-balance="%d">' % (
            cls, name.lower(), money, profit, balance
        )

        html += '<div class="header">%s</div>' % name

        html += '<div class="grid">'
        for k, v in info.items():
            html += '<div class="box"><b>%s</b><br>%s</div>' % (k, v)
        html += '</div>'

        # BANK
        for bank in acc["banks"]:
            order_in = parse_number(bank.get("Đơn Nhận", "0"))
            order_out = parse_number(bank.get("Đơn Thanh Toán", "0"))

            max_time = 0
            for k, v in bank.items():
                if "Time" in k:
                    m = parse_minutes(v)
                    if m > max_time:
                        max_time = m

            # màu
            if max_time > 60:
                bg = "#ff4d4d"; icon="🔴"; text="white"
            elif max_time > 30:
                bg = "#fbc531"; icon="🟡"; text="black"
            else:
                bg = "#4cd137"; icon="🟢"; text="white"

            html += '<div class="bank" style="background:%s;color:%s">' % (bg, text)
            html += '<div><b>%s BANK</b></div>' % icon

            for k, v in bank.items():
                if "Time" in k:
                    m = parse_minutes(v)
                    if m > 60:
                        c="darkred"
                    elif m > 30:
                        c="orange"
                    else:
                        c="green"
                    html += '<div class="small" style="color:%s">%s: %s</div>' % (c, k, v)
                else:
                    html += '<div><b>%s:</b> %s</div>' % (k, v)

            html += '<div><b>Đơn Nhận:</b> %d</div>' % order_in
            html += '<div><b>Đơn Thanh Toán:</b> %d</div>' % order_out
            html += '</div>'

        html += '</div>'

    html += """
</div>

<script>
new Chart(document.getElementById('chart'), {
    type: 'bar',
    data: {
        labels: """ + str(labels) + """,
        datasets: [{
            label: 'Lợi nhuận',
            data: """ + str(profits) + """
        }]
    }
});

function toggleDark() {
    document.body.classList.toggle('dark');
}

document.getElementById('search').onkeyup = function() {
    let v = this.value.toLowerCase();
    document.querySelectorAll('.account').forEach(a => {
        a.style.display = a.dataset.name.includes(v) ? 'block' : 'none';
    });
}

function sortData(type) {
    let list = document.getElementById('list');
    let items = Array.from(list.children);
    items.sort((a,b)=> b.dataset[type] - a.dataset[type]);
    items.forEach(i=>list.appendChild(i));
}
</script>

</body>
</html>
"""

    return html


# RUN
with open(input_file, "r", encoding="utf-8") as f:
    raw = f.read()

data = parse_data(raw)

url = "https://methanhmup.site/moi.php"

html_text = generate_html(data)

res = requests.post(
    url,
    files={
        "data": (None, html_text)
    },
    headers={
        "User-Agent": "Mozilla/5.0"
    }
)

print(res.status_code)
print(res.text)

with open(output_file, "w", encoding="utf-8") as f:
    f.write(html_text)


print("XONG ROI")