from django.shortcuts import render
from django.http import HttpResponse, Http404, JsonResponse
from django.conf import settings
import os
from blog.models import Post, Category
from .models import Download, DownloadType, Banner


def index(request):
    """Trang chủ"""
    news_posts = Post.objects.filter(
        is_published=True,
        category__slug='tin-tuc'
    ).order_by('-created_at')[:5]
    
    event_posts = Post.objects.filter(
        is_published=True,
        category__slug='su-kien'
    ).order_by('-created_at')[:5]
    
    featured_posts = Post.objects.filter(
        is_published=True,
        is_featured=True
    ).order_by('-created_at')[:5]
    
    # Leaderboard Logic
    from game_accounts.models import TRoleInfo, GameServer
    from .utils import get_level_from_exp
    
    # Get all servers to map ID
    servers = GameServer.objects.all()
    server_map = {s.server_id: s.server_name for s in servers}
    
    # Get Top 10 by Exp
    try:
        top_roles = TRoleInfo.objects.using('game').order_by('-dw_total_exp')[:10]
        leaderboard = []
        for i, role in enumerate(top_roles):
            # Calculate Level
            level = get_level_from_exp(role.dw_total_exp)
            
            # Determine Server Name
            # Assuming pattern: AccountID = BaseID * 10000 + ServerID
            # ServerID = AccountID % 10000
            server_id = role.dw_account_id % 10000
            server_name = server_map.get(server_id, f"S{server_id}")
            
            leaderboard.append({
                'rank': i + 1,
                'name': role.sz_role_name,
                'server': server_name,
                'level': level,
                'exp': role.dw_total_exp # Optional for display
            })
    except Exception as e:
        print(f"Error fetching leaderboard: {e}")
        leaderboard = []
    
    context = {
        'news_posts': news_posts,
        'event_posts': event_posts,
        'featured_posts': featured_posts,
        'leaderboard': leaderboard,
    }

    # print(leaderboard)
    
    return render(request, 'core/index.html', context)


def download(request):
    """Trang tải Launcher"""
    latest_launcher = Download.objects.filter(
        download_type=DownloadType.LAUNCHER
    ).first()
    
    launcher_date = ""
    if latest_launcher and latest_launcher.created_at:
        launcher_date = latest_launcher.created_at.strftime("%d/%m/%Y")
    
    context = {
        'launcher': latest_launcher,
        'launcher_date': launcher_date,
    }
    
    return render(request, 'core/download.html', context)


def camnang_detail(request, guide_id, slug):
    """Serve file HTML tĩnh từ thư mục static/cam-nang"""
    html_file = os.path.join(
        settings.BASE_DIR, 
        'static', 
        'cam-nang', 
        str(guide_id), 
        f'{slug}.html'
    )
    
    if not os.path.exists(html_file):
        raise Http404("Bài viết không tồn tại")
    
    with open(html_file, 'r', encoding='utf-8') as f:
        content = f.read()
    
    return HttpResponse(content, content_type='text/html; charset=utf-8')


def camnang_index(request):
    """Serve trang cẩm nang từ template Django"""
    # Danh sách các bài hướng dẫn (verified existing files)
    guides = [
        # Bí Kíp Hành Tẩu
        {'title': 'Sơ Nhập', 'url': '/cam-nang/50/so-nhap.html'},
        {'title': 'Cấp 1 - Cấp 30', 'url': '/cam-nang/51/cap-1-cap-30.html'},
        {'title': 'Cấp 31 - Cấp 39', 'url': '/cam-nang/52/cap-31-cap-39.html'},
        {'title': 'Cấp 40 - Cấp 49', 'url': '/cam-nang/53/cap-40-cap-49.html'},
        {'title': 'Cấp 50 - Cấp 60', 'url': '/cam-nang/54/cap-50-cap-60.html'},
        # Thông Tin Cơ Bản
        {'title': 'Các Bước Tham Gia', 'url': '/cam-nang/55/cac-buoc-tham-gia.html'},
        {'title': 'Sửa Font Chữ', 'url': '/cam-nang/56/sua-font-chu.html'},
        # Võ Lâm Sơ Nhập
        {'title': 'Cốt Truyện', 'url': '/cam-nang/45/cot-truyen.html'},
        {'title': 'Nhân Vật', 'url': '/cam-nang/46/nhan-vat.html'},
        {'title': 'Giao Diện Game', 'url': '/cam-nang/47/giao-dien-game.html'},
        {'title': 'Tiền Tệ', 'url': '/cam-nang/48/tien-te.html'},
        {'title': 'Vật Phẩm Cần Thiết', 'url': '/cam-nang/49/vat-pham-can-thiet.html'},
        # Hướng Dẫn Luyện Cấp
        {'title': 'Nhiệm Vụ', 'url': '/cam-nang/41/nhiem-vu.html'},
        {'title': 'Bản Đồ', 'url': '/cam-nang/42/ban-do.html'},
        {'title': 'Phụ Bản', 'url': '/cam-nang/43/phu-ban.html'},
        {'title': 'Boss', 'url': '/cam-nang/44/boss.html'},
        # Gia Tăng Sức Mạnh
        {'title': 'VIP', 'url': '/cam-nang/3/vip.html'},
        {'title': 'Cường Hóa', 'url': '/cam-nang/4/cuong-hoa.html'},
        {'title': 'Thú Cưỡi', 'url': '/cam-nang/5/thu-cuoi.html'},
        {'title': 'Võ Học', 'url': '/cam-nang/6/vo-hoc.html'},
        {'title': 'Huyết Kiếm', 'url': '/cam-nang/7/huyet-kiem.html'},
        {'title': 'Bảo Giáp', 'url': '/cam-nang/8/bao-giap.html'},
        {'title': 'Cảnh Giới', 'url': '/cam-nang/9/canh-gioi.html'},
        {'title': 'Kinh Mạch', 'url': '/cam-nang/10/kinh-mach.html'},
        {'title': 'Danh Vọng', 'url': '/cam-nang/11/danh-vong.html'},
        {'title': 'Phong Vật Chí', 'url': '/cam-nang/12/phong-vat-chi.html'},
        {'title': 'Hiệp Khách Hành', 'url': '/cam-nang/13/hiep-khach-hanh.html'},
        {'title': 'Thần Binh Chí', 'url': '/cam-nang/14/than-binh-chi.html'},
        {'title': 'Tu Luyện Trang Bị', 'url': '/cam-nang/15/tu-luyen-trang-bi.html'},
        {'title': 'Bảo Thạch Tinh Phách', 'url': '/cam-nang/16/bao-thach-tinh-phach.html'},
        {'title': 'Dịch Cân Kinh', 'url': '/cam-nang/17/dich-can-kinh.html'},
        {'title': 'Tu Hành', 'url': '/cam-nang/18/tu-hanh.html'},
        {'title': 'Huyết Ma Công', 'url': '/cam-nang/19/huyet-ma-cong.html'},
        {'title': 'Thất Tinh Trận', 'url': '/cam-nang/20/that-tinh-tran.html'},
        {'title': 'Thiết Bố Sam', 'url': '/cam-nang/21/thiet-bo-sam.html'},
        {'title': 'Đồng Mỗ Công', 'url': '/cam-nang/22/dong-mo-cong.html'},
        # Tính Năng
        {'title': 'Thương Thành', 'url': '/cam-nang/23/thuong-thanh.html'},
        {'title': 'Chiến Trường', 'url': '/cam-nang/24/chien-truong.html'},
        {'title': 'Auto', 'url': '/cam-nang/25/auto.html'},
        {'title': 'Tình Duyên', 'url': '/cam-nang/26/tinh-duyen.html'},
        {'title': 'Thành Tựu', 'url': '/cam-nang/27/thanh-tuu.html'},
        {'title': 'Bang Hội', 'url': '/cam-nang/28/bang-hoi.html'},
        {'title': 'Hoành Tẩu', 'url': '/cam-nang/29/hoanh-tau.html'},
        {'title': 'Chân Khí', 'url': '/cam-nang/30/chan-khi.html'},
        {'title': 'Hảo Hữu', 'url': '/cam-nang/31/hao-huu.html'},
        {'title': 'Chế Độ PK', 'url': '/cam-nang/32/che-do-pk.html'},
        {'title': 'Sự Kiện Định Kỳ', 'url': '/cam-nang/33/su-kien-dinh-ky.html'},
        {'title': 'Chúng Chí Thành Thành', 'url': '/cam-nang/34/chung-chi-thanh-thanh.html'},
        {'title': 'Sầm Phu Tử', 'url': '/cam-nang/35/sam-phu-tu.html'},
        {'title': 'Hí Thuyết Thiên Hạ', 'url': '/cam-nang/36/hi-thuyet-thien-ha.html'},
        {'title': 'Thanh Vân Thục Đạo', 'url': '/cam-nang/37/thanh-van-thuc-dao.html'},
        {'title': 'Phong Cuồng Sưu Đầu', 'url': '/cam-nang/38/phong-cuong-suu-dau.html'},
        {'title': 'Khiêu Chiến Quần Hiệp', 'url': '/cam-nang/39/khieu-chien-quan-hiep.html'},
        {'title': 'Tiểu Trư Mau Chạy', 'url': '/cam-nang/40/tieu-tru-mau-chay.html'},
    ]
    
    return render(request, 'core/camnang_index.html', {'guides': guides})


def api_banners(request):
    """API endpoint to get active banners for launcher"""
    banners = Banner.objects.filter(is_active=True)
    
    data = {
        'success': True,
        'count': banners.count(),
        'banners': [
            {
                'id': banner.pk,
                'title': banner.title,
                'image': request.build_absolute_uri(banner.image.url) if banner.image else None,
                'link': banner.link or '',
                'order': banner.order,
            }
            for banner in banners
        ]
    }
    
    return JsonResponse(data, json_dumps_params={'ensure_ascii': False})


def api_launcher_version(request):
    """API endpoint to get latest launcher version"""
    launcher = Download.objects.filter(download_type=DownloadType.LAUNCHER).first()
    
    if not launcher:
        return JsonResponse({'success': False, 'message': 'No launcher found'})
    
    data = {
        'success': True,
        'version': launcher.version,
        'download_url': request.build_absolute_uri(launcher.get_download_url()),
        'changelog': launcher.changelog or '',
        'is_required': launcher.is_required,
    }
    
    return JsonResponse(data, json_dumps_params={'ensure_ascii': False})


def api_patch_version(request):
    """API endpoint to get latest patch update version"""
    patch = Download.objects.filter(download_type=DownloadType.PATCH).first()
    
    if not patch:
        return JsonResponse({'success': False, 'message': 'No patch found'})
    
    data = {
        'success': True,
        'version': patch.version,
        'download_url': request.build_absolute_uri(patch.get_download_url()),
        'changelog': patch.changelog or '',
        'is_required': patch.is_required,
    }
    
    return JsonResponse(data, json_dumps_params={'ensure_ascii': False})
