import json
from channels.generic.websocket import WebsocketConsumer
from asgiref.sync import async_to_sync
from .models import MenuItem, MealTime, Profiles

class Chating(WebsocketConsumer):
    def connect(self):
        self.board_name = self.scope['url_route']['kwargs'].get('board_name')
        async_to_sync(self.channel_layer.group_add)(self.board_name, self.channel_name)
        self.accept()
        
        # இணைந்த உடனே மெனுவை எடுத்து அனுப்பிவிடும்
        self.send_menu_data()

    def send_menu_data(self):
        try:
            # போர்டு பெயரை வைத்து User ID-ஐ எடுக்கிறோம்
            profile = Profiles.objects.get(servicename=self.board_name)
            items = MenuItem.objects.filter(created_by_id=profile.user_id, is_available=True)
            
            item_list = []
            for index, item in enumerate(items, 1):
                # MealTime logic
                times = MealTime.objects.filter(created_by_id=profile.user_id, meal_type=item.meal_type).first()
                item_list.append({
                    'name': item.name,
                    'price': str(item.price),
                    'meal_type': item.meal_type,
                    'from_time': times.from_time.strftime('%H:%M') if times and times.from_time else None,
                    'to_time': times.to_time.strftime('%H:%M') if times and times.to_time else None,
                })
            print(item_list,'rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr')
            # ESP32-க்கு டேட்டாவை அனுப்புகிறோம்
            self.send(text_data=json.dumps({"type": "menu_update", "data": item_list}))
        except Exception as e:
            print(f"Error: {e}")

    def disconnect(self, code):
        async_to_sync(self.channel_layer.group_discard)(self.board_name, self.channel_name)