"""Mock data source for development"""
from typing import List, Optional
from datetime import datetime, timedelta
from app.data_sources.base import BaseDataSource, MatchData, LeagueData, TeamData


class MockSource(BaseDataSource):
    """Mock data source for testing/development"""
    
    def __init__(self):
        self.mock_leagues = [
            LeagueData(source_id="premier_league", name="Premier League", country="England"),
            LeagueData(source_id="la_liga", name="La Liga", country="Spain"),
            LeagueData(source_id="bundesliga", name="Bundesliga", country="Germany"),
        ]
        
        self.mock_teams = [
            TeamData(source_id="team_1", name="Team A", country="England"),
            TeamData(source_id="team_2", name="Team B", country="England"),
            TeamData(source_id="team_3", name="Team C", country="Spain"),
            TeamData(source_id="team_4", name="Team D", country="Spain"),
        ]
    
    def get_leagues(self, sport: str = "football") -> List[LeagueData]:
        """Get mock leagues"""
        return self.mock_leagues
    
    def get_matches(
        self,
        league_source_id: str,
        from_date: Optional[datetime] = None,
        to_date: Optional[datetime] = None
    ) -> List[MatchData]:
        """Get mock matches"""
        matches = []
        base_date = datetime.now().replace(hour=15, minute=0, second=0, microsecond=0)
        
        for i in range(10):
            match_date = base_date + timedelta(days=i)
            
            if from_date and match_date < from_date:
                continue
            if to_date and match_date > to_date:
                continue
            
            home_idx = i % len(self.mock_teams)
            away_idx = (i + 1) % len(self.mock_teams)
            
            # Some finished matches
            status = "finished" if i < 5 else "scheduled"
            home_score = (2 + i) % 4 if status == "finished" else None
            away_score = (1 + i) % 3 if status == "finished" else None
            
            matches.append(MatchData(
                source_id=f"match_{league_source_id}_{i}",
                league_source_id=league_source_id,
                home_team_name=self.mock_teams[home_idx].name,
                away_team_name=self.mock_teams[away_idx].name,
                match_date=match_date,
                status=status,
                home_score=home_score,
                away_score=away_score,
                source_url=f"https://mock.com/match/match_{i}"
            ))
        
        return matches
    
    def get_match_details(self, match_source_id: str) -> Optional[MatchData]:
        """Get mock match details"""
        return MatchData(
            source_id=match_source_id,
            league_source_id="premier_league",
            home_team_name="Team A",
            away_team_name="Team B",
            match_date=datetime.now() + timedelta(days=1),
            status="scheduled"
        )

