#!/usr/bin/env python3
import rospy
import numpy as np
from lasr_vector_databases_msgs.srv import TxtIndexRequest, TxtIndexResponse, TxtIndex
from lasr_vector_databases_faiss import (
    load_model,
    parse_txt_file,
    get_sentence_embeddings,
    create_vector_database,
)


class TxtIndexService:
    def __init__(self):
        rospy.init_node("txt_index_service")
        rospy.Service("lasr_faiss/txt_index", TxtIndex, self.execute_cb)
        self._sentence_embedding_model = load_model()
        rospy.loginfo("Text index service started")

    def execute_cb(self, req: TxtIndexRequest):
        txt_fp: str = req.txt_path
        sentences_to_embed: list[str] = parse_txt_file(txt_fp)
        sentence_embeddings: np.ndarray = get_sentence_embeddings(
            sentences_to_embed, self._sentence_embedding_model
        )
        index_path: str = req.index_path
        create_vector_database(sentence_embeddings, index_path)
        return TxtIndexResponse()


if __name__ == "__main__":
    TxtIndexService()
    rospy.spin()
