import os
import re
import logging
import json
from datetime import datetime
from config import Config

logger = logging.getLogger(__name__)

def validate_personal_code(code):
    """اعتبارسنجی کد پرسنلی (حداقل ۴ رقم)"""
    return bool(re.match(r'^\d{4,}$', code))

def validate_phone_number(phone):
    """اعتبارسنجی شماره تماس ایران"""
    return bool(re.match(r'^09\d{9}$', phone))

def escape_markdown(text):
    """Escape کردن کاراکترهای خاص Markdown"""
    if text is None:
        return ''
    escape_chars = r'_*[]()~`>#+-=|{}.!'
    return ''.join(f'\\{c}' if c in escape_chars else c for c in str(text))

def format_user_info(user):
    """فرمت‌سازی اطلاعات کاربر برای نمایش"""
    import json
    
    # تعیین وضعیت
    if user['video_file_id']:
        try:
            video_ids = json.loads(user['video_file_id'])
            if isinstance(video_ids, list):
                video_count = len(video_ids)
                status = f"✅ {video_count} ویدیو ارسال شده"
            else:
                status = "✅ تکمیل شده"
        except:
            status = "✅ تکمیل شده"
    elif user['personal_code']:
        status = "⏳ در انتظار ویدیو"
    else:
        status = "🆕 شروع نشده"
    
    # تبدیل تاریخ به فرمت مناسب
    registered_at = user['registered_at']
    if registered_at:
        try:
            if isinstance(registered_at, str):
                registered_at = datetime.fromisoformat(registered_at.replace('Z', '+00:00'))
            registered_at_str = registered_at.strftime('%Y-%m-%d %H:%M:%S')
        except:
            registered_at_str = str(registered_at)
    else:
        registered_at_str = 'نامشخص'
    
    updated_at = user['updated_at']
    if updated_at:
        try:
            if isinstance(updated_at, str):
                updated_at = datetime.fromisoformat(updated_at.replace('Z', '+00:00'))
            updated_at_str = updated_at.strftime('%Y-%m-%d %H:%M:%S')
        except:
            updated_at_str = str(updated_at)
    else:
        updated_at_str = 'نامشخص'
    
    # Escape کردن مقادیر
    first_name = escape_markdown(user['first_name'] or 'نامشخص')
    last_name = escape_markdown(user['last_name'] or '')
    username = escape_markdown(user['username'] or 'ندارد')
    personal_code = escape_markdown(user['personal_code'] or 'ثبت نشده')
    phone_number = escape_markdown(user['phone_number'] or 'ثبت نشده')
    
    # ساخت متن با استفاده از متغیرها (بدون اموجی در داخل رشته‌های خام)
    text_lines = [
        "👤 **اطلاعات کاربر**",
        "",
        f"🆔 شناسه تلگرام: `{user['telegram_id']}`",
        f"👤 نام: {first_name} {last_name}",
        f"📛 یوزرنیم: @{username}",
        "",
        "📋 **اطلاعات ثبت شده:**",
        f"🔹 کد پرسنلی: `{personal_code}`",
        f"📱 شماره تماس: `{phone_number}`",
        "",
        f"🎥 **وضعیت ویدیو:** {status}",
        f"📅 تاریخ ثبت: {registered_at_str}",
        f"🔄 آخرین بروزرسانی: {updated_at_str}"
    ]
    
    return "\n".join(text_lines)

def format_users_list(users):
    """فرمت‌سازی لیست کاربران برای نمایش"""
    if not users:
        return "📭 هیچ کاربری ثبت نشده است."
    
    text_lines = ["📋 لیست کاربران ثبت نام شده:", ""]
    
    for i, user in enumerate(users, 1):
        # دریافت تعداد ویدیوها
        if user['video_file_id']:
            try:
                video_ids = json.loads(user['video_file_id'])
                if isinstance(video_ids, list):
                    video_count = len(video_ids)
                else:
                    video_count = 1
                status_icon = f"✅ ({video_count} ویدیو)"
            except:
                status_icon = "✅"
        else:
            status_icon = "⏳"
        
        name = escape_markdown(user['first_name'] or 'نامشخص')
        text_lines.append(f"{i}. {status_icon} {name} (ID: {user['telegram_id']})")
        if user['personal_code']:
            text_lines.append(f"   کد: {escape_markdown(user['personal_code'])}")
    
    return "\n".join(text_lines)

def get_file_size(file_path):
    """گرفتن حجم فایل به مگابایت"""
    try:
        size = os.path.getsize(file_path)
        return size / (1024 * 1024)
    except:
        return 0

def is_admin(user_id):
    """بررسی ادمین بودن کاربر"""
    return user_id in Config.ADMIN_IDS

def generate_backup_filename():
    """تولید نام فایل بکاپ"""
    return f"backup_{datetime.now().strftime('%Y%m%d_%H%M%S')}.json"

def get_video_count(user):
    """دریافت تعداد ویدیوهای یک کاربر"""
    if not user or not user['video_file_id']:
        return 0
    
    try:
        import json
        video_ids = json.loads(user['video_file_id'])
        if isinstance(video_ids, list):
            return len(video_ids)
        return 1
    except:
        return 1

def format_user_summary(user):
    """فرمت‌سازی خلاصه اطلاعات کاربر برای نمایش در لیست"""
    name = user['first_name'] or 'نامشخص'
    video_count = get_video_count(user)
    
    if video_count > 0:
        status = f"✅ {video_count} ویدیو"
    elif user['personal_code']:
        status = "⏳ در انتظار"
    else:
        status = "🆕 شروع نشده"
    
    return f"{name} - {status} - کد: {user['personal_code'] or 'ندارد'}"