import google.generativeai as palm
import gradio as gr
import os
import json
from getvalues import getValues
from datetime import datetime, timedelta
import uuid
import re

# Set your API key
palm.configure(api_key=os.environ["PALM_KEY"])

# Select the PaLM 2 model
# model = 'models/text-bison-001'


# contx = """Act as a friendly personal assistant. 
# You help users manage their daily tasks by providing them with a variety of features.
# Below are the list of features you have: \n
# - You can create goals\n
# - You can share goals with friends\n
# - You can create reminders\n
# - You can create routines\n
# - You can share reminders with users friends\n
# - You can share routines with users friends\n
# - You can create todo lists\n
# - You can share todo lists with users friends\n
# - You can create groups\n
# - You can share groups with users friends\n
# - You can create communities\n
# - You can create notes for user\n
# - You can share notes with users friends\n
# - You can publish posts on timeline\n
# - You can invite friends to this(CosmoAI) app\n
# - You can help users purchase coins\n
# - You can view your friends\n
# - You can view your groups\n
# - You can view your communities\n
# - You can view your shared reminders\n
# - You can view your shared routines\n
# - You can view your todo lists\n
# - You can view your shared todo lists\n
# - You can view your shared notes\n
# - You can start a timer or a stopwatch\n\n"""




def responsenew(data):
    idval = str(uuid.uuid4())
    print(f"\n\n{data}")
    newdata = data.replace("'", '"')
    try:
        items = json.loads(newdata)
        text = items['text']
        text = text.lower()
        print(text)
    except json.JSONDecodeError as e:
        print("Invalid JSON:", e)
    response = palm.chat( messages=text)
    print(f"\n{response.last}")
    if text is not None:
        if "remind me" in text:
            values = getValues(text)
            if values[0] is not None:
                msg = values[0]
            else:
                msg = "Reminder Alert"
            if values[1] is not None:
                time = values[1]
            else:
                time1 = datetime.now()
                time2 = time1 + timedelta(hours=1)
                time = time2.strftime("%d-%m-%Y %H:%M:%S.%f")
            if values[2] is not None:
                day = values[2]
            else:
                day = "today"
            if values[3] is not None:
                date = values[3]
            else:
                date = datetime.today()
            if values[4] is not None:
                reps = values[4]
            else:
                reps = "Once"
            respo = {
                'message': f"Message: {msg} \nTime: {time} \nDay: {day} \nCreated Successfully.",
                'action': "create_reminder",
                'function': {
                        'id': idval,
                        'sound': 'General',
                        'subTitle': 'Task',
                        'type': 'Note',
                        'title': msg,
                        'description': '',
                        'time': time.upper(),
                        'timestamp' : datetime.now().strftime("%d-%m-%Y %H:%M:%S.%f"),
                        'enable': False,
                        'report': [],
                        'icon': 'https://firebasestorage.googleapis.com/v0/b/cosmo-f5007.appspot.com/o/categories%2FIcons%2Ftaskicon.svg?alt=media&token=56f3fc55-8eda-4463-bceb-7bf3198dff3c',
                        'color': 'FFD700',
                        'sharedToMe': [],
                        'sharedByMe': [],
                        'repeat': reps,
                        'reminders': [{
                            'time': time.upper(),
                            'enable': False,
                            'repeat': reps,
                            'title': msg,
                            'id': idval,
                            'note': '',
                            'dates': [],
                            }],
                    }
            }

        elif "add to do" in text:
            replaced_string = text.replace("add todo", "").replace("add to do","")
            # 1. Replace "note down" with an empty string:
            replaced_string = text.replace("note down", "")
            
            # 2. Split the string into words:
            words = replaced_string.split()
            
            # 3. Extract the first two words:
            first_two_words = words[:2]  # Get the first two elements of the list
            
            # 4. Join the words back into a string (if needed):
            result_string = " ".join(first_two_words)
            respo = {
            'message': "Todo added!",
            'action': "create_todo",
            'function': {
                'name': result_string,
                'id': idval,
                'subTasks': [{
                    'task':replaced_string,
                    'done': False
                }],
                'shared': [],
                'sharedByMe': [],
                    },
            }
        elif "note down" in text:
            # 1. Replace "note down" with an empty string:
            replaced_string = text.replace("note down", "")
            
            # 2. Split the string into words:
            words = replaced_string.split()
            
            # 3. Extract the first two words:
            first_two_words = words[:2]  # Get the first two elements of the list
            
            # 4. Join the words back into a string (if needed):
            result_string = " ".join(first_two_words)
            respo = {
            'message': "Got it! Saved to your notes.",
            'action': "create_note",
            'function': {
                'title': result_string,
                'id': idval,
                'type': 'Note',
                'description': replaced_string,
                'time': datetime.now().strftime("%d/%m/%Y"),
                'mainTime': datetime.now().strftime("%I:%M %p"),
                'complete': False,
                'shared': [],
                'sharedByMe': [],
                }
            }
        elif "add coins" in text:
            respo = {
                "message": "Click the button below to view Premium Services and Coin Recharge options: ",
                "action": "payment",
                "function": "nothing",
            }
        elif "show my friends" in text:
            respo = {
                "message": "Here's the list of your friends: ",
                "action": "show_friends",
                "function": "nothing",
            }
        elif "show my groups" in text:
            respo = {
                "message": "You are member of following groups: ",
                "action": "show_mygroups",
                "function": "nothing",
            }
        elif "show my communities" in text:
            respo = {
                "message": "You are part of following communities🫶: ",
                "action": "show_mycommunities",
                "function": "nothing",
            }
        elif "show shared reminders" in text:
            respo = {
                "message": "Here's the list of your shared reminders: ",
                "action": "shared_reminders",
                "function": "nothing",
            }
        elif "create a post" in text:
            respo = {
                "message": "Sure!",
                "action": "create_post",
                "function": "nothing",
            }
        elif "show my routines" in text:
            respo = {
                "message": "Here's the list of your routines: ",
                "action": "myroutines",
                "function": "nothing",
            }
        # elif "what is your name" or "what's your name" or "who are you" in data:
        #     respo = {
        #         "message": "My name is Cosmo. I am your friendly personal assistant.",
        #         "action": "nothing",
        #         "function": "nothing",
        #     }
        elif "notify" in text:
            respo = {
                "message": "Select your friends to notify",
                "action": "send_notify",
                "function": "nothing",
            }
        elif "show actions" in text:
            respo = {
                "message": "Here is list of actions you can use:",
                "action": "show_actions",
                "function": "nothing",
            }
        else:
            respo = {
                "message": response.last,
                "action": "nothing",
                "function": "nothing",
            }
    else:
        respo = {
            "message": "Whoops, seems like we're a bit overloaded! Don't worry, your request is in the queue and we'll get back to you as soon as possible.",
            "action": "nothing",
            "function": "nothing",
        }
    return json.dumps(respo)
    
    # intent = palm.chat(
    #     messages=f"""
                      
    #                 Identify the user's intent from text_data below:\n
    # Arguments: text_data = {data}\n\n
    # Return the intent as one-word string representing the user's intent, as mentioned below:
    # * if intent = viewing user's routine return = "my_routines"
    # * if intent = viewing user's notes return = "view_notes"
    # * if intent = viewing user's posts return = "view_posts"
    # * if intent = viewing user's shared notes return = "view_shared_notes"
    # * if intent = viewing user's todo lists return = "view_todo_lists"
    # * if intent = viewing user's shared todo lists return = "view_shared_todo_lists"
    # * if intent = viewing user's shared routines return = "view_shared_routines"
    # * if intent = creating a goal return = "create_goal"
    # * if intent = creating a reminder return = "create_reminder"
    # * if intent = creating a routine return = "create_routine"
    # * if intent = creating a group return = "create_group"
    # * if intent = creating a community return = "create_community"
    # * if intent = creating a note return = "create_note"
    # * if intent = creating a post return = "create_post"
    # * if intent = creating a todo list return = "create_todo_list"
    # * if intent = sharing a reminder return = "share_reminder"
    # * if intent = sharing a routine return = "share_routine"
    # * if intent = sharing a group return = "share_group"
    # * if intent = sharing a todo list return = "share_todo_list"
    # * if intent = sharing a note return = "share_note"
    # * if intent = notify then return = "send_notify"
    # * if intent = show actions then return = "show_actions"

    # """,
    # )
    
    # respo = {"message": intent.last, "action": "nothing", "function": "nothing"}
    # if intent.last is not None:
    #     if "purchase_coins" in intent.last:
    #         respo = {
    #             "message": "Click the button below to view Premium Services and Coin Recharge options: ",
    #             "action": "payment",
    #             "function": "nothing",
    #         }
    #     elif "view_friends" in intent.last:
    #         respo = {
    #             "message": "Here's the list of your friends: ",
    #             "action": "show_friends",
    #             "function": "nothing",
    #         }
    #     elif "view_groups" in intent.last:
    #         respo = {
    #             "message": "You are member of following groups: ",
    #             "action": "show_mygroups",
    #             "function": "nothing",
    #         }
    #     elif "view_communities" in intent.last:
    #         respo = {
    #             "message": "You are part of following communities🫶: ",
    #             "action": "show_mycommunities",
    #             "function": "nothing",
    #         }
    #     elif "shared_reminders" in intent.last:
    #         respo = {
    #             "message": "Here's the list of your shared reminders: ",
    #             "action": "shared_reminders",
    #             "function": "nothing",
    #         }
    #     elif "my_routines" in intent.last:
    #         respo = {
    #             "message": "Here's the list of your routines: ",
    #             "action": "myroutines",
    #             "function": "nothing",
    #         }
    #     # elif "cosmo_name" in intent.last:
    #     #     respo = {
    #     #         "message": "My name is Cosmo. I am your friendly personal assistant.",
    #     #         "action": "nothing",
    #     #         "function": "nothing",
    #     #     }
    #     elif "send_notify" in intent.last:
    #         respo = {
    #             "message": "Select your friends to notify",
    #             "action": "send_notify",
    #             "function": "nothing",
    #         }
    #     elif "show_actions" in intent.last:
    #         respo = {
    #             "message": "Here is list of actions you can use:",
    #             "action": "show_actions",
    #             "function": "nothing",
    #         }
    #     else:
    #         respo = {
    #             "message": response.last,
    #             "action": "nothing",
    #             "function": "nothing",
    #         }
    # else:
    #     respo = {
    #         "message": response.last,
    #         "action": "nothing",
    #         "function": "nothing",
    #     }
    # return json.dumps(respo)


gradio_interface = gr.Interface(fn=responsenew, inputs="text", outputs="text")
gradio_interface.launch()