# -- Code Cell --
import pandas as pd
train_df = pd.read_csv('train_data.csv')
test_df = pd.read_csv("test_data.csv")

# -- Code Cell --
test_df.head()

# -- Code Cell --
train_df[train_df['sentence_id'] == 1150]['text']

# -- Code Cell --
sp = pd.read_csv('support_examples.csv')

# -- Code Cell --
sp.head()

# -- Code Cell --
sp['sentence_id'].unique()

# -- Code Cell --
import unicodedata

# -- Code Cell --


# -- Code Cell --
for i in range(len(sp)):
    lista_emoji = list(sp['emoji_sequence'][i])
    for emoji in lista_emoji:
        print(unicodedata.name(emoji))
    

# -- Code Cell --
for i in range(len(test_df)):
    lista_emoji = list(test_df['emoji_sequence'][i])
    for emoji in lista_emoji:
        print(unicodedata.name(emoji))
        print(emoji)
        

# -- Code Cell --
slang_map = {
    "🧢": "lie, cap, false, not true",
    "💀": "dead, dying of laughter, hilarious",
    "🐍": "snake, traitor, backstabber",
    "🤡": "clown, fool, embarrassing",
    "🔥": "fire, hot, amazing, trending",
    "👀": "meet-up, sizinig-up, team",
    "🥶": "cold, outfit",
    "👻📱💔": "did not answer phone, break-up",
    "💀😂🤣": "dying of laughter, very funny",
    "🧢🤥🚫": "liar, false, untrustfull",
    "🎈🤡😱":"pennywise, scarry, horror",
    "🧛⚰️😴": "deep sleep",
    "🐍👺🔪": "traitor, enemy, disloyal",
    "☕": "gossip drama rumor",
    "🍰": "easy simple effortless",
    "🐐": "greatest best champion legend",
    "💀": "funny dying laughter",
    "🤡": "foolish stupid idiot",
    "🪜": "climb success",
    "🔥": "hot amazing lit",
    "🦵": "luck break", 
    "👀": "look see agreement",
    "🐷": "impossible flying",
    "🌚": "mocking shade",
}

# -- Code Cell --
from sentence_transformers import SentenceTransformer, util
import numpy as np
import emoji
def intelligent_preprocess(text):
    for icon, meaning in slang_map.items():
        if icon in text:
            text += f" {meaning}"
    text = emoji.demojize(text)
    text = text.replace(":", " ").replace("_", " ")
    
    return text

# -- Code Cell --
model = SentenceTransformer('all-MiniLM-L6-v2')
queries = pd.read_csv("test_data.csv")
corpus_embeddings = model.encode(train_df['text'].tolist(), convert_to_tensor=True)

# -- Code Cell --
results = []

for _, row in queries.iterrows():
    raw_emoji = row['emoji_sequence']
    
    processed_query = intelligent_preprocess(raw_emoji)
    
    query_embedding = model.encode(processed_query, convert_to_tensor=True)
    
    scores = util.cos_sim(query_embedding, corpus_embeddings)[0]
    best_match_idx = scores.argmax().item()
    
    predicted_id = train_df.iloc[best_match_idx]['sentence_id']
    
    results.append({
        "subtaskID": 1,
        "datapointID": row['sample_id'],
        "answer": predicted_id
    })

df = pd.DataFrame(results).to_csv("submission.csv", index=False)