#!/usr/bin/env python3
"""
Script to assign test housekeeping tasks to the housekeeping user.
This creates sample tasks for testing the housekeeping dashboard.
"""

import sys
import os
from pathlib import Path
from datetime import datetime, timedelta

# Add the Backend directory to the path
backend_dir = Path(__file__).parent.parent
sys.path.insert(0, str(backend_dir))

from src.shared.config.database import SessionLocal
from src.models import Role, User, Room
from src.hotel_services.models.housekeeping_task import HousekeepingTask, HousekeepingStatus, HousekeepingType

def assign_housekeeping_tasks():
    """Assign test housekeeping tasks to the housekeeping user."""
    db = SessionLocal()
    try:
        # Get housekeeping user
        housekeeping_user = db.query(User).join(Role).filter(
            Role.name == 'housekeeping',
            User.email == 'housekeeping@gnxsoft.com'
        ).first()
        
        if not housekeeping_user:
            print("✗ Housekeeping user not found! Please run add_housekeeping_user.py first.")
            sys.exit(1)
        
        print(f"✓ Found housekeeping user: {housekeeping_user.email} (ID: {housekeeping_user.id})")
        
        # Get admin user for created_by
        admin_role = db.query(Role).filter(Role.name == 'admin').first()
        admin_user = db.query(User).filter(User.role_id == admin_role.id).first() if admin_role else None
        
        # Get some rooms
        rooms = db.query(Room).limit(5).all()
        
        if not rooms:
            print("✗ No rooms found in the database! Please seed rooms first.")
            sys.exit(1)
        
        print(f"✓ Found {len(rooms)} rooms")
        
        # Default checklist items for different task types
        checklists = {
            'checkout': [
                {'item': 'Bathroom cleaned', 'completed': False, 'notes': ''},
                {'item': 'Beds made with fresh linens', 'completed': False, 'notes': ''},
                {'item': 'Trash emptied', 'completed': False, 'notes': ''},
                {'item': 'Towels replaced', 'completed': False, 'notes': ''},
                {'item': 'Amenities restocked', 'completed': False, 'notes': ''},
                {'item': 'Floor vacuumed and mopped', 'completed': False, 'notes': ''},
                {'item': 'Surfaces dusted', 'completed': False, 'notes': ''},
                {'item': 'Windows and mirrors cleaned', 'completed': False, 'notes': ''},
            ],
            'stayover': [
                {'item': 'Beds made', 'completed': False, 'notes': ''},
                {'item': 'Trash emptied', 'completed': False, 'notes': ''},
                {'item': 'Towels replaced', 'completed': False, 'notes': ''},
                {'item': 'Bathroom cleaned', 'completed': False, 'notes': ''},
            ],
            'vacant': [
                {'item': 'Deep clean bathroom', 'completed': False, 'notes': ''},
                {'item': 'Change linens', 'completed': False, 'notes': ''},
                {'item': 'Vacuum and mop', 'completed': False, 'notes': ''},
                {'item': 'Dust surfaces', 'completed': False, 'notes': ''},
                {'item': 'Check amenities', 'completed': False, 'notes': ''},
            ],
            'inspection': [
                {'item': 'Check all amenities', 'completed': False, 'notes': ''},
                {'item': 'Test electronics', 'completed': False, 'notes': ''},
                {'item': 'Check for damages', 'completed': False, 'notes': ''},
                {'item': 'Verify cleanliness', 'completed': False, 'notes': ''},
            ],
        }
        
        # Create tasks for today
        today = datetime.utcnow().replace(hour=9, minute=0, second=0, microsecond=0)
        task_types = ['checkout', 'stayover', 'vacant', 'inspection']
        
        created_count = 0
        skipped_count = 0
        
        for i, room in enumerate(rooms):
            # Cycle through task types
            task_type = task_types[i % len(task_types)]
            
            # Check if task already exists for this room today
            existing_task = db.query(HousekeepingTask).filter(
                HousekeepingTask.room_id == room.id,
                HousekeepingTask.assigned_to == housekeeping_user.id,
                HousekeepingTask.status == HousekeepingStatus.pending,
                HousekeepingTask.scheduled_time >= today.replace(hour=0, minute=0),
                HousekeepingTask.scheduled_time < today.replace(hour=23, minute=59, second=59)
            ).first()
            
            if existing_task:
                print(f"  ⚠️  Task already exists for Room {room.room_number}, skipping...")
                skipped_count += 1
                continue
            
            # Schedule tasks at different times throughout the day
            scheduled_time = today + timedelta(hours=i)
            
            task = HousekeepingTask(
                room_id=room.id,
                booking_id=None,
                task_type=HousekeepingType(task_type),
                status=HousekeepingStatus.pending,
                scheduled_time=scheduled_time,
                assigned_to=housekeeping_user.id,
                created_by=admin_user.id if admin_user else housekeeping_user.id,
                checklist_items=checklists.get(task_type, []),
                notes=f'Test task for Room {room.room_number} - {task_type} cleaning',
                estimated_duration_minutes=45 if task_type == 'checkout' else 30
            )
            
            db.add(task)
            created_count += 1
            print(f"  ✓ Created {task_type} task for Room {room.room_number} (scheduled: {scheduled_time.strftime('%Y-%m-%d %H:%M')})")
        
        db.commit()
        
        print(f"\n✓ Tasks assigned successfully!")
        print(f"  - Created: {created_count} task(s)")
        print(f"  - Skipped: {skipped_count} task(s) (already exist)")
        print(f"  - Assigned to: {housekeeping_user.email}")
        
    except Exception as e:
        db.rollback()
        print(f"✗ Error assigning housekeeping tasks: {e}")
        import traceback
        traceback.print_exc()
        sys.exit(1)
    finally:
        db.close()

if __name__ == '__main__':
    print("Assigning test housekeeping tasks to housekeeping user...")
    print("=" * 60)
    assign_housekeeping_tasks()
    print("=" * 60)
    print("Done!")

