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

des = {
    'version': "1.0.0",
    'credits': "HVHVZ",
    'description': "Cập nhật khuyến mãi vào file km.json",
    'power': "Quản trị 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:
        return []

def save_km_list(content):
    try:
        with open('modules/cache/km.json', 'w', encoding='utf-8') as f:
            json.dump(content, f, ensure_ascii=False, indent=4)
        return True, None
    except Exception as e:
        return False, str(e)

def handle_capnhat_command(message, message_object, thread_id, thread_type, author_id, client):
    try:
        if str(author_id) not in ADMIN:
            error_msg = "❌ Chỉ quản trị viên mới có thể sử dụng lệnh này!"
            client.replyMessage(Message(text=error_msg), message_object, thread_id, thread_type, ttl=60000)
            return
        
        content = message.replace(f"{PREFIX}capnhat", "", 1).strip()
        if not content:
            error_msg = f"❌ Vui lòng nhập đúng định dạng: {PREFIX}capnhat {{số ngày}} Tiêu đề: Nội dung"
            client.replyMessage(Message(text=error_msg), message_object, thread_id, thread_type, ttl=60000)
            return
        
        parts = content.split(" ", 1)
        if len(parts) < 2 or not parts[0].isdigit():
            error_msg = f"❌ Vui lòng nhập số ngày hợp lệ! Ví dụ: {PREFIX}capnhat 3 Tiêu đề: Nội dung"
            client.replyMessage(Message(text=error_msg), message_object, thread_id, thread_type, ttl=60000)
            return
        
        days = int(parts[0])
        content = parts[1].strip()
        
        if ": " in content:
            title, km_content = content.split(": ", 1)
        else:
            title = "Khuyến mãi mới"
            km_content = content
        
        current_date = get_current_date_vn()
        expiry_date = current_date + timedelta(days=days)
        
        new_km = {
            "title": title,
            "content": km_content,
            "expiry_date": expiry_date.strftime("%d/%m/%Y")
        }
        
        km_list = load_km_list()
        km_list.append(new_km)
        
        success, error = save_km_list(km_list)
        if not success:
            error_msg = f"❌ Lỗi khi lưu khuyến mãi: {error}. Vui lòng thử lại!"
            client.replyMessage(Message(text=error_msg), message_object, thread_id, thread_type, ttl=60000)
            return
        
        success_msg = (
            f"✅ Cập nhật khuyến mãi thành công!\n\n"
            f"CẬP NHẬT KHUYẾN MÃI NGÀY {current_date.strftime('%d/%m/%Y')} - {new_km['expiry_date']}\n\n"
            f"🔥 {title}\n"
            f"    {km_content}\n\n"
            "✅ Nhanh tay chốt đơn để nhận ưu đãi cực hot! 🔥\n\n"
            "Xem chi tiết và hàng trăm sản phẩm khác tại website: https://shop.moretech.io.vn/\n\n"
            "Cảm ơn cả nhà đã luôn ủng hộ MORETECH! ❤️"
        )
        client.replyMessage(Message(text=success_msg), 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():
    return {
        'capnhat': handle_capnhat_command
    }