#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import re
import requests
import json
import random
import time
from urllib.parse import quote, urlencode

class AdManager:
    """
    Kelas untuk mengelola berbagai platform iklan dan shortlink
    """
    
    def __init__(self, config):
        """
        Inisialisasi AdManager dengan konfigurasi
        
        Args:
            config (dict): Konfigurasi untuk platform iklan
        """
        self.config = config
        self.shortlink_apis = {
            'gplinks': {
                'api_url': 'https://gplinks.in/api',
                'api_key': config.get('GPLINKS_API_KEY', ''),
                'enabled': bool(config.get('GPLINKS_API_KEY', ''))
            },
            'ez4short': {
                'api_url': 'https://ez4short.com/api',
                'api_key': config.get('EZ4SHORT_API_KEY', ''),
                'enabled': bool(config.get('EZ4SHORT_API_KEY', ''))
            },
            'droplink': {
                'api_url': 'https://droplink.co/api',
                'api_key': config.get('DROPLINK_API_KEY', ''),
                'enabled': bool(config.get('DROPLINK_API_KEY', ''))
            },
            'tnlink': {
                'api_url': 'https://tnlink.in/api',
                'api_key': config.get('TNLINK_API_KEY', ''),
                'enabled': bool(config.get('TNLINK_API_KEY', ''))
            }
        }
        
        # Daftar platform yang diaktifkan
        self.enabled_platforms = [k for k, v in self.shortlink_apis.items() if v['enabled']]
        
        # Jika tidak ada platform yang diaktifkan, gunakan mode dummy
        if not self.enabled_platforms:
            print("Peringatan: Tidak ada platform shortlink yang dikonfigurasi. Menggunakan mode dummy.")
    
    def get_random_platform(self):
        """
        Mendapatkan platform shortlink secara acak dari daftar yang diaktifkan
        
        Returns:
            str: Nama platform shortlink
        """
        if not self.enabled_platforms:
            return None
        return random.choice(self.enabled_platforms)
    
    def create_shortlink(self, url):
        """
        Membuat shortlink dari URL menggunakan platform yang tersedia
        
        Args:
            url (str): URL yang akan dipersingkat
            
        Returns:
            dict: Hasil pembuatan shortlink dengan format:
                {
                    'success': bool,
                    'shortlink': str,
                    'platform': str,
                    'error': str (jika ada)
                }
        """
        platform = self.get_random_platform()
        
        if not platform:
            # Mode dummy jika tidak ada platform yang diaktifkan
            return {
                'success': True,
                'shortlink': url,
                'platform': 'direct',
                'error': None
            }
        
        try:
            api_config = self.shortlink_apis[platform]
            api_url = api_config['api_url']
            api_key = api_config['api_key']
            
            # Format parameter sesuai dengan API platform
            params = {
                'api': api_key,
                'url': url
            }
            
            # Kirim request ke API
            response = requests.get(api_url, params=params, timeout=30)
            
            # Periksa respons
            if response.status_code == 200:
                data = response.json()
                
                # Format respons berbeda untuk setiap platform
                if platform == 'gplinks':
                    if data.get('status') == 'success':
                        return {
                            'success': True,
                            'shortlink': data.get('shortenedUrl'),
                            'platform': platform,
                            'error': None
                        }
                    else:
                        return {
                            'success': False,
                            'shortlink': None,
                            'platform': platform,
                            'error': data.get('message', 'Unknown error')
                        }
                elif platform in ['ez4short', 'droplink', 'tnlink']:
                    if 'shortenedUrl' in data:
                        return {
                            'success': True,
                            'shortlink': data.get('shortenedUrl'),
                            'platform': platform,
                            'error': None
                        }
                    else:
                        return {
                            'success': False,
                            'shortlink': None,
                            'platform': platform,
                            'error': data.get('message', 'Unknown error')
                        }
            
            # Jika respons tidak 200 atau format tidak dikenali
            return {
                'success': False,
                'shortlink': None,
                'platform': platform,
                'error': f"Error: HTTP {response.status_code}"
            }
            
        except Exception as e:
            return {
                'success': False,
                'shortlink': None,
                'platform': platform,
                'error': str(e)
            }
    
    def get_ad_message(self):
        """
        Mendapatkan pesan iklan acak
        
        Returns:
            str: Pesan iklan
        """
        ad_messages = [
            "🔥 Dapatkan penghasilan dengan mempersingkat link Anda sendiri! Daftar di platform kami sekarang.",
            "💰 Hasilkan uang dari link Anda! Kunjungi website kami untuk informasi lebih lanjut.",
            "⚡ Persingkat link, dapatkan uang! Bergabunglah dengan ribuan pengguna yang sudah menghasilkan.",
            "💸 Monetisasi traffic Anda dengan layanan shortlink premium kami.",
            "🚀 Tingkatkan penghasilan Anda dengan setiap klik pada link yang dipersingkat!"
        ]
        return random.choice(ad_messages)
    
    def get_ad_footer(self):
        """
        Mendapatkan footer iklan untuk ditambahkan ke pesan
        
        Returns:
            str: Footer iklan
        """
        if not self.enabled_platforms:
            return ""
        
        platform_names = ", ".join(self.enabled_platforms)
        return f"\n\n💎 Link dipersingkat menggunakan {platform_names} 💎"
