import json
from datetime import datetime
from zlapi.models import Message, ThreadType
from config import PREFIX

des = {
    'version': "1.0.0",
    'credits': "HVHVZ",
    'description': "Hiển thị danh sách khuyến mãi",
    'power': "Thành viên"
}

def get_current_date_vn():
    return datetime.now()

def load_km_list():
    try:
        with open('modules/cache/km.json', 'r', encoding='utf-8') as f:
            data = json.load(f)
            return data if isinstance(data, list) else []
    except Exception as e:
        print(f"Error loading km.json: {str(e)}")
        return []

def handle_km_command(message, message_object, thread_id, thread_type, author_id, client):
    try:
        current_date = get_current_date_vn()
        km_list = load_km_list()
        if not km_list:
            error_msg = "Hiện tại không có khuyến mãi!"
            client.replyMessage(Message(text=error_msg), message_object, thread_id, thread_type, ttl=60000)
            return

        valid_km_groups = {}
        for km in km_list:
            try:
                expiry_date = datetime.strptime(km['expiry_date'], "%d/%m/%Y").date()
                if expiry_date >= current_date.date():
                    expiry_str = km['expiry_date']
                    if expiry_str not in valid_km_groups:
                        valid_km_groups[expiry_str] = []
                    valid_km_groups[expiry_str].append(km)
            except Exception as e:
                print(f"Error parsing km entry {km}: {str(e)}")
                continue

        if not valid_km_groups:
            error_msg = "❌ Hiện tại không có khuyến mãi nào còn hiệu lực!"
            client.replyMessage(Message(text=error_msg), message_object, thread_id, thread_type, ttl=60000)
            return

        current_date_str = current_date.strftime("%d/%m/%Y")
        for expiry_str, kms in valid_km_groups.items():
            km_texts = []
            title_groups = {}
            for km in kms:
                title = km['title']
                if title not in title_groups:
                    title_groups[title] = []
                title_groups[title].append(km['content'])

            for title, contents in title_groups.items():
                content_lines = []
                for content in contents:
                    for line in content.split('\n'):
                        content_lines.append(line.strip())
                km_texts.append(f"🔥 {title}\n\n" + "\n".join(content_lines))

            reply_text = (
                f"CẬP NHẬT CHƯƠNG TRÌNH & KHUYẾN MÃI NGÀY {current_date_str} - {expiry_str}\n\n"
                + "\n\n".join(km_texts) + "\n\n"
                + "__________________________________________________\n"
                + "✅ Nhanh tay chốt đơn để nhận ưu đãi cực hot! 🔥\n\n"
                + "Xem chi tiết các sản phẩm khác tại website: https://shop.moretech.io.vn/\n\n"
                + "Cảm ơn cả nhà đã luôn tin tưởng MORETECH! ❤️"
            )
            client.replyMessage(Message(text=reply_text), message_object, thread_id, thread_type)

    except Exception as e:
        error_msg = f"❌ Lỗi không xác định: {str(e)}. Vui lòng thử lại!"
        client.replyMessage(Message(text=error_msg), message_object, thread_id, thread_type, ttl=60000)

def ft_vxkiue():
    print("Loaded km module")
    return {
        'km': handle_km_command
    }
