from flask import Blueprint, jsonify, request
from models import db, Word, Category, DownloadLog
from datetime import datetime, timedelta
import uuid

api_bp = Blueprint('api', __name__, url_prefix='/api')

@api_bp.route('/words', methods=['GET'])
def get_words():
    """جلب جميع الكلمات أو البحث"""
    try:
        page = request.args.get('page', 1, type=int)
        per_page = request.args.get('per_page', 50, type=int)
        search = request.args.get('search', '')
        category = request.args.get('category', '')
        last_update = request.args.get('last_update', '')
        
        query = Word.query.filter_by(is_active=True)
        
        # البحث
        if search:
            search_term = f'%{search}%'
            query = query.filter(
                db.or_(
                    Word.fur_word.like(search_term),
                    Word.arabic_word.like(search_term),
                    Word.english_word.like(search_term)
                )
            )
        
        # فلترة حسب الفئة
        if category:
            query = query.filter_by(category=category)
        
        # التحديثات الجديدة فقط
        if last_update:
            try:
                last_update_date = datetime.fromisoformat(last_update)
                query = query.filter(Word.updated_at > last_update_date)
            except ValueError:
                pass
        
        # ترقيم الصفحات
        words = query.paginate(
            page=page, per_page=per_page, error_out=False
        )
        
        return jsonify({
            'success': True,
            'words': [word.to_dict() for word in words.items],
            'pagination': {
                'page': page,
                'pages': words.pages,
                'per_page': per_page,
                'total': words.total,
                'has_next': words.has_next,
                'has_prev': words.has_prev
            },
            'server_time': datetime.utcnow().isoformat()
        })
    
    except Exception as e:
        return jsonify({
            'success': False,
            'error': str(e)
        }), 500

@api_bp.route('/categories', methods=['GET'])
def get_categories():
    """جلب جميع الفئات"""
    try:
        categories = Category.query.filter_by(is_active=True).all()
        return jsonify({
            'success': True,
            'categories': [{
                'id': cat.id,
                'name': cat.name,
                'description': cat.description
            } for cat in categories]
        })
    except Exception as e:
        return jsonify({
            'success': False,
            'error': str(e)
        }), 500

@api_bp.route('/download/log', methods=['POST'])
def log_download():
    """تسجيل عملية التحميل"""
    try:
        data = request.get_json()
        
        log = DownloadLog(
            device_id=data.get('device_id', str(uuid.uuid4())),
            download_type=data.get('download_type', 'full'),
            words_count=data.get('words_count', 0),
            app_version=data.get('app_version', '1.0')
        )
        
        db.session.add(log)
        db.session.commit()
        
        return jsonify({
            'success': True,
            'message': 'تم تسجيل التحميل بنجاح'
        })
    
    except Exception as e:
        return jsonify({
            'success': False,
            'error': str(e)
        }), 500

@api_bp.route('/words/similar', methods=['GET'])
def get_similar_words():
    """جلب الكلمات المشابهة للتحقق من التكرار"""
    try:
        query = request.args.get('query', '').strip()
        if not query:
            return jsonify({'success': True, 'words': []})

        search_term = f'%{query}%'
        similar_words = Word.query.filter(
            Word.is_active == True,
            Word.fur_word.like(search_term)
        ).limit(10).all()

        return jsonify({
            'success': True,
            'words': [word.to_dict() for word in similar_words]
        })
    except Exception as e:
        return jsonify({
            'success': False,
            'error': str(e)
        }), 500

@api_bp.route('/stats', methods=['GET'])
def get_stats():
    """إحصائيات عامة"""
    try:
        total_words = Word.query.filter_by(is_active=True).count()
        total_categories = Category.query.filter_by(is_active=True).count()
        
        # إحصائيات التحميل للأسبوع الماضي
        week_ago = datetime.utcnow() - timedelta(days=7)
        weekly_downloads = DownloadLog.query.filter(
            DownloadLog.download_time >= week_ago
        ).count()
        
        return jsonify({
            'success': True,
            'stats': {
                'total_words': total_words,
                'total_categories': total_categories,
                'weekly_downloads': weekly_downloads,
                'last_update': datetime.utcnow().isoformat()
            }
        })
    
    except Exception as e:
        return jsonify({
            'success': False,
            'error': str(e)
        }), 500