import json
import os
import sys
import boto3
from botocore.config import Config
import getpass
import streamlit as st
from opensearchpy import OpenSearch, RequestsHttpConnection
rekog_client = boto3.client('rekognition',aws_access_key_id=st.secrets['user_access_key'],
                aws_secret_access_key=st.secrets['user_secret_key'],region_name='us-east-1')
def extract_image_metadata(img):
    res = rekog_client.detect_labels(
    Features= [ "GENERAL_LABELS","IMAGE_PROPERTIES" ],
    Image = { 
        
        "Bytes":img
    },
    MaxLabels = 10,
    MinConfidence = 80.0,
    Settings = { 
    #       "GeneralLabels": { 
    #          "LabelCategoryExclusionFilters": [ "string" ],
    #          "LabelCategoryInclusionFilters": [ "string" ],
    #          "LabelExclusionFilters": [ "string" ],
    #          "LabelInclusionFilters": [ "string" ]
    #       },
        "ImageProperties": { 
            "MaxDominantColors": 5
        }
    }
    )
    objects_category_color = {}
    objects_category_color_masked = {}
    
    def add_span(x,type):
        if(type == 'obj'):
            return ""+x+""
        if(type == 'cat'):
            return ""+x+""
        if(type == 'color'):
            return ""+x+""
        
    
    for label in res['Labels']:
        objects_category_color_masked[add_span(label['Name'],'obj')]={'categories':[],'color':""}
        objects_category_color[label['Name']] = {'categories':[],'color':""}
        if(len(label['Categories'])!=0):
            for category in label['Categories']:
                objects_category_color_masked[add_span(label['Name'],'obj')]['categories'].append(add_span(category['Name'].lower(),'cat'))
                objects_category_color[label['Name']]['categories'].append(category['Name'].lower())
        if(len(label['Instances'])!=0):
            for instance in label['Instances']:
                if(len(instance['DominantColors'])!=0):
                    objects_category_color[label['Name']]['color'] = instance['DominantColors'][0]['SimplifiedColor']
                    objects_category_color_masked[""+label['Name']+""]['color'] = add_span(instance['DominantColors'][0]['SimplifiedColor'],'color')
                
        st.session_state.input_rekog_directoutput = objects_category_color_masked
    objects = []
    categories = []
    colors = []
    for key in objects_category_color.keys():
        if(key.lower() not in objects):
            objects.append(key.lower())
        categories.append(" ".join(set(objects_category_color[key]['categories'])))
        if(objects_category_color[key]['color']!=''):
            colors.append(objects_category_color[key]['color'].lower())
            
    objects = " ".join(set(objects))
    categories = " ".join(set(categories))
    colors = " ".join(set(colors))
    
    print("^^^^^^^^^^^^^^^^^^")
    print(colors+ " " + objects + " " + categories)
    
    return colors+ " " + objects + " " + categories
def call(a,b):
    print("'''''''''''''''''''''''")
    print(b)
    
    if(st.session_state.input_is_rewrite_query == 'enabled' and st.session_state.input_rewritten_query!=""):
        
        
        #st.session_state.input_rewritten_query['query']['bool']['should'].pop()
        st.session_state.input_rewritten_query['query']['bool']['should'].append( {
                    "simple_query_string": {
                    
                        "query": a + " " + b,
                        "fields":['description','rekog_all^3']
                    
                    }
                })
        rekog_query = st.session_state.input_rewritten_query
        
    else:
        rekog_query = { "query":{
                "simple_query_string": {
                  
                    "query": a + " " + b,
                    "fields":['description','rekog_all^3']
                  
                }
              }
            }
        st.session_state.input_rewritten_query = rekog_query
        
    # response = aos_client.search(
    #     body = rekog_query,
    #     index = 'demo-retail-rekognition'
    #     #pipeline = 'RAG-Search-Pipeline'
    # )
    
    
    # hits = response['hits']['hits']
    # print("rewrite-------------------------")
    # arr = []
    # for doc in hits:
    #     # if('b5/b5319e00' in doc['_source']['image_s3_url'] ):
    #     #     filter_out +=1
    #     #     continue
        
    #     res_ = {"desc":doc['_source']['text'].replace(doc['_source']['metadata']['rekog_all']," ^^^ " +doc['_source']['metadata']['rekog_all']),
    #             "image_url":doc['_source']['metadata']['image_s3_url']}
    #     if('highlight' in doc):
    #         res_['highlight'] = doc['highlight']['text']
    #     # if('caption_embedding' in doc['_source']):
    #     #     res_['sparse'] = doc['_source']['caption_embedding']
    #     # if('query_sparse' in response_ and len(arr) ==0 ):
    #     #     res_['query_sparse'] = response_["query_sparse"]
    #     res_['id'] = doc['_id']
    #     res_['score'] = doc['_score']
    #     res_['title'] = doc['_source']['text']
    #     res_['rekog'] = {'color':doc['_source']['metadata']['rekog_color'],'category': doc['_source']['metadata']['rekog_categories'],'objects':doc['_source']['metadata']['rekog_objects']}
           
    #     arr.append(res_)
            
    
    # return arr