"""
Simple compliance test - creates work stamps and sends alert
"""

import os
import django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'worktimeapp.settings')
django.setup()

from datetime import datetime, time
from django.utils import timezone
from stamps.models import Stamp
from user.models import User
from functions.models import Function
from ml_service.push_service import PushNotificationService
from ml_service.models import ComplianceNotification

def test_compliance_notification():
    user_id = '575f8050-e027-4db9-9ff1-31e0b1b7dfad'
    today = timezone.now().date()
    
    # Get user
    user = User.objects.get(id=user_id)
    print(f"User: {user.firstname}")
    print(f"Compliance: {user.compliance_enabled}")
    
    # Delete today's stamps
    Stamp.objects.filter(user_id=user_id, date=today).delete()
    
    # Get functions
    clock_in_func = Function.objects.filter(question_type='clock_in').first()
    clock_out_func = Function.objects.filter(question_type='clock_out').first()
    
    # Create stamps - 9 hours (exceeding 8 hour policy)
    start_time = time(8, 0)
    end_time = time(17, 0)  # 9 hours
    
    start_dt = timezone.make_aware(datetime.combine(today, start_time))
    end_dt = timezone.make_aware(datetime.combine(today, end_time))
    
    # Clock in
    Stamp.objects.create(
        user=user,
        date=today,
        time=start_time,
        stamp_function=clock_in_func.id,
        start_date=start_dt,
        description="Clock in"
    )
    
    # Clock out
    Stamp.objects.create(
        user=user,
        date=today,
        time=end_time,
        stamp_function=clock_out_func.id,
        start_date=end_dt,
        description="Clock out"
    )
    
    print(f"\nCreated: {start_time} to {end_time} ({9} hours)")
    
    # Send notification
    push_service = PushNotificationService()
    
    # Simulate different alert types
    alerts = [
        {
            'type': 'daily_limit_exceeded',
            'severity': 'high',
            'message': 'You\'ve worked 9 hours. Daily limit is 8 hours. Consider clocking out.',
            'time_remaining': None
        },
        {
            'type': 'break_required',
            'severity': 'medium',
            'message': 'No break taken in 8.5 hours. A 15-minute break is required.',
            'time_remaining': None
        },
        {
            'type': 'consecutive_days',
            'severity': 'low',
            'message': 'You\'ve worked 6 consecutive days. Consider taking a rest day.',
            'time_remaining': None
        }
    ]
    
    print("\nSending test compliance notifications...")
    
    for alert in alerts:
        if alert['severity'] == 'high':
            title = "Compliance Warning"
            emoji = "⚠️"
        elif alert['severity'] == 'medium':
            title = "Compliance Alert"
            emoji = "💡"
        else:
            title = "Compliance Reminder"
            emoji = "ℹ️"
        
        body = f"{emoji} {alert['message']}"
        
        # Save to database first
        notification = ComplianceNotification.objects.create(
            user_id=user_id,
            alert_type=alert['type'],
            severity=alert['severity'],
            title=title,
            message=alert['message'],
            time_remaining=alert.get('time_remaining')
        )
        
        # Then send push notification
        success = push_service.send_notification(
            user_id,
            title=title,
            body=body,
            data={
                'type': 'compliance_alert',
                'severity': alert['severity'],
                'notification_type': 'compliance',
                'notification_id': str(notification.id)
            }
        )
        
        if success:
            print(f"[OK] Sent: {title} (Saved to DB)")
        else:
            print(f"[ERROR] Failed to send")
    
    print("\n" + "="*60)
    print("Check your phone for notifications!")
    print("="*60)

if __name__ == '__main__':
    test_compliance_notification()

