#!/usr/bin/env python3
"""
Multi-User Pushover notification module for solar monitor
Supports sending notifications to multiple users
"""

import requests
import logging
from pushover_config import *

logger = logging.getLogger(__name__)

class MultiUserPushoverNotifier:
    def __init__(self):
        self.base_url = "https://api.pushover.net/1/messages.json"
        self.users = []
        self.load_users()
        
    def load_users(self):
        """Load users from configuration"""
        # Primary user (you)
        self.users.append({
            'user_key': PUSHOVER_USER_KEY,
            'app_token': PUSHOVER_APP_TOKEN,
            'name': 'Primary User'
        })
        
        # Second user (family member)
        self.users.append({
            'user_key': 'us5sg9aqb2i7iqbjmmocr7p2df1ymp',
            'app_token': PUSHOVER_APP_TOKEN,  # Using same app token for simplicity
            'name': 'Family Member'
        })
        
        logger.info(f"Loaded {len(self.users)} users for notifications")
        
    def add_user(self, user_key, app_token, name="Additional User"):
        """Add a new user for notifications"""
        self.users.append({
            'user_key': user_key,
            'app_token': app_token,
            'name': name
        })
        logger.info(f"Added user: {name}")
        
    def send_notification_to_all(self, message, title=None, priority=None, sound=None):
        """Send notification to all configured users"""
        success_count = 0
        total_users = len(self.users)
        
        for user in self.users:
            success = self.send_notification_to_user(
                user, message, title, priority, sound
            )
            if success:
                success_count += 1
                
        logger.info(f"Sent notifications to {success_count}/{total_users} users")
        return success_count == total_users
        
    def send_notification_to_user(self, user, message, title=None, priority=None, sound=None):
        """Send notification to a specific user"""
        payload = {
            'token': user['app_token'],
            'user': user['user_key'],
            'message': message,
            'title': title or NOTIFICATION_TITLE,
            'sound': sound or NOTIFICATION_SOUND,
            'priority': priority or NOTIFICATION_PRIORITY
        }
        
        try:
            response = requests.post(self.base_url, data=payload)
            if response.status_code == 200:
                logger.info(f"Notification sent to {user['name']}")
                return True
            else:
                logger.error(f"Failed to send to {user['name']}: {response.text}")
                return False
        except Exception as e:
            logger.error(f"Error sending to {user['name']}: {e}")
            return False
            
    def send_solar_update(self, data):
        """Send formatted solar update to all users"""
        message = self.format_solar_message(data)
        return self.send_notification_to_all(message, "⚡ Solar Production Update")
        
    def send_alert(self, alert_message):
        """Send alert to all users"""
        return self.send_notification_to_all(alert_message, "🚨 Solar Monitor Alert", priority=1)
        
    def format_solar_message(self, data):
        """Format solar data for notification"""
        try:
            current_power = data.get('current_power', 'N/A')
            today_energy = data.get('today_energy', 'N/A')
            yesterday_energy = data.get('yesterday_energy', 'N/A')
            monthly_energy = data.get('monthly_energy', '0.00 kWh')  # Default to 0.00 if not found
            
            message = f"""🔋 Current Power: {current_power}
📊 E Today: {today_energy}
📈 E Yesterday: {yesterday_energy}
📅 E This Month: {monthly_energy}

⏰ {data.get('timestamp', 'N/A')}"""
            
            return message
            
        except Exception as e:
            logger.error(f"Error formatting message: {e}")
            return f"Solar data update: {str(data)}"

# Global instance for easy access
multi_user_notifier = MultiUserPushoverNotifier() 