import requests
from bs4 import BeautifulSoup
import time
import json
from datetime import datetime
from fake_useragent import UserAgent
from rich.console import Console
from rich.table import Table
from rich import print as rprint

console = Console()

class LiveScoreTracker:
    def __init__(self):
        self.base_url = "https://www.matchendirect.fr/live-score/"
        self.session = requests.Session()
        self.ua = UserAgent()
        self.headers = self._generate_headers()
        self.previous_matches = []
        
    def _generate_headers(self):
        return {
            'User-Agent': self.ua.random,
            'Accept-Language': 'fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7',
            'Referer': 'https://www.google.com/',
            'DNT': '1'
        }
    
    def _get_page(self):
        try:
            response = self.session.get(
                self.base_url,
                headers=self.headers,
                timeout=15
            )
            response.raise_for_status()
            return response.text
        except Exception as e:
            console.print(f"[bold red]! خطأ في الاتصال: {str(e)}[/bold red]")
            return None
    
    def _parse_match(self, match):
        try:
            link = match.find('a', class_='ga4-matchdetail')
            if not link:
                return None
                
            team1 = link.find('span', class_='lm3_eq1').get_text(strip=True)
            team2 = link.find('span', class_='lm3_eq2').get_text(strip=True)
            score = link.find('span', class_='lm3_score').get_text(strip=True)
            
            return {
                'team1': team1.replace('\n', '').strip(),
                'team2': team2.replace('\n', '').strip(),
                'score': score,
                'competition': link.get('data-competitionname', 'Unknown'),
                'link': f"https://www.matchendirect.fr{link['href']}",
                'last_update': datetime.now().strftime("%Y-%m-%d %H:%M:%S")
            }
        except Exception as e:
            console.print(f"[yellow]! خطأ في معالجة مباراة: {str(e)}[/yellow]")
            return None
    
    def get_live_matches(self):
        html = self._get_page()
        if not html:
            return []
            
        soup = BeautifulSoup(html, 'html.parser')
        return [m for m in (
            self._parse_match(match) 
            for match in soup.find_all('td', class_='lm3')
        ) if m]
    
    def display_matches(self, matches):
        table = Table(
            title=f"المباريات الحية - {datetime.now().strftime('%H:%M:%S')}",
            title_style="bold cyan",
            show_header=True,
            header_style="bold magenta"
        )
        
        table.add_column("رقم", style="dim", width=4)
        table.add_column("المباراة", width=40)
        table.add_column("النتيجة", justify="center", width=10)
        table.add_column("البطولة", width=30)
        table.add_column("آخر تحديث", width=12)
        
        for idx, match in enumerate(matches, 1):
            table.add_row(
                str(idx),
                f"{match['team1']} vs {match['team2']}",
                f"[bold green]{match['score']}[/bold green]",
                match['competition'],
                match['last_update']
            )
        
        console.print(table)
    
    def monitor(self, interval=120):
        console.clear()
        console.rule("[bold cyan]⚽ نظام مراقبة المباريات الحية[/bold cyan]")
        
        while True:
            try:
                current_matches = self.get_live_matches()
                if not current_matches:
                    console.print("[yellow]! لا توجد مباريات حالية[/yellow]")
                    continue
                
                # عرض المباريات
                self.display_matches(current_matches)
                
                # الكشف عن التغييرات
                new_matches = [
                    m for m in current_matches 
                    if m not in self.previous_matches
                ]
                
                if new_matches:
                    console.print(f"[bold green]✓ تم اكتشاف {len(new_matches)} مباراة جديدة[/bold green]")
                
                # حفظ النتائج
                with open('live_matches.json', 'w', encoding='utf-8') as f:
                    json.dump(current_matches, f, ensure_ascii=False, indent=2)
                
                self.previous_matches = current_maches.copy()
                
            except Exception as e:
                console.print(f"[bold red]! خطأ جسيم: {str(e)}[/bold red]")
            
            # انتظار مع مؤقت مرئي
            for remaining in range(interval, 0, -5):
                console.print(
                    f"\r[dim]التحديث القادم خلال {remaining:02d} ثانية...[/dim]",
                    end=""
                )
                time.sleep(5)
            console.print("\r", end="")

if __name__ == '__main__':
    tracker = LiveScoreTracker()
    
    try:
        tracker.monitor(interval=60)
    except KeyboardInterrupt:
        console.print("\n[bold cyan]✓ تم إيقاف النظام بنجاح[/bold cyan]")        اجعل  العرض اجمل وحسن المؤقت لاتجعله يتكرر في كل مرة حسن الجدول فهو كبير جدا   لا اريد تكرار النتائج الا في حالة تغييرها  يعني تم تسجيل هدف  جديد