
# -*- coding: utf-8 -*-
# Unified scraper loader - supports both Interface A (results) and Interface B (sources)
from pkgutil import walk_packages
import os
from modules import source_utils
from modules.kodi_utils import set_property

int_window_prop = 'ultimate_nondebrid.internal_results.%s'

def load_scraper(name):
    """Load a scraper module and return it wrapped for Interface A"""
    try:
        module = __import__('scrapers.%s' % name, fromlist=['source'])
        source_class = getattr(module, 'source', None)
        if source_class is None:
            return None
        # Check if it uses Interface A (has results method)
        if hasattr(source_class, 'results'):
            return source_class
        # Check if it uses Interface B (has sources method)
        elif hasattr(source_class, 'sources'):
            # Create adapter
            return _create_adapter(name, source_class)
        return None
    except Exception as e:
        from modules import log_utils
        log_utils.log('Error loading scraper %s: %s' % (name, e))
        return None

def _create_adapter(name, source_class):
    """Wrap an Interface B scraper as Interface A"""
    class AdaptedSource:
        def __init__(self):
            self.scrape_provider = name
            self._inner = source_class()
            self.sources_list = []
            
        def results(self, info):
            try:
                self.sources_list = []
                title = info.get('title', '')
                year = info.get('year', '')
                season = info.get('season', '')
                episode = info.get('episode', '')
                imdb = info.get('imdb_id', '')
                tvdb = info.get('tvdb_id', '')
                tvshowtitle = info.get('tvshowtitle', info.get('title', ''))
                aliases = info.get('aliases', [])
                premiered = info.get('premiered', '')
                
                data = {
                    'title': title, 'year': year, 'imdb': imdb, 'tvdb': tvdb,
                    'season': str(season) if season else '',
                    'episode': str(episode) if episode else '',
                    'tvshowtitle': tvshowtitle,
                    'aliases': aliases, 'premiered': premiered,
                }
                
                raw_sources = self._inner.sources(data, [])
                if not raw_sources:
                    set_property(int_window_prop % self.scrape_provider, json.dumps([]))
                    return []
                
                for s in raw_sources:
                    try:
                        item = {
                            'name': s.get('name', ''),
                            'display_name': s.get('name', ''),
                            'url_dl': s.get('url', ''),
                            'url': s.get('url', ''),
                            'id': s.get('url', ''),
                            'quality': s.get('quality', 'SD'),
                            'size': float(s.get('size', 0)),
                            'size_label': '%.2f GB' % float(s.get('size', 0)) if s.get('size') else 'Unknown',
                            'extraInfo': s.get('info', s.get('quality', '')),
                            'source': self.scrape_provider,
                            'scrape_provider': self.scrape_provider,
                            'direct': True,
                        }
                        self.sources_list.append(item)
                    except:
                        pass
                set_property(int_window_prop % self.scrape_provider, json.dumps(self.sources_list))
                return self.sources_list
            except:
                set_property(int_window_prop % self.scrape_provider, json.dumps([]))
                return []
    
    return AdaptedSource
