import re
import spacy
import requests
import json
nlp = spacy.load("en_core_web_sm")

from dotenv import load_dotenv
import os
load_dotenv()
API_CONSULTA_STOCK_AGROTA=os.environ['API_CONSULTA_AGROTA_PRODUCTS_STOCK']

class Procesador:
    @staticmethod
    def analyze_text(text: str):
        doc = nlp(text)
        nouns = [token.text for token in doc if token.pos_ == "NOUN"]
        adjectives = [token.text for token in doc if token.pos_ == "ADJ"]
        return {"nouns": nouns, "adjectives": adjectives}

    @staticmethod
    def fetch_replacement_code(code):
        url = f"{API_CONSULTA_STOCK_AGROTA}/{code}"
        response = requests.get(url)
        print(f"Fetching replacement for code: {code} - Status Code: {response.status_code}")
        if response.status_code == 200:
            print(f"Response JSON: {response.json()}")
            # return response.json().get('replacement_code', code)
            return json.dumps(response.json())
        else:
            return code

    @staticmethod
    def find_and_replace_product_codes(text: str):
        print("testx", text)
        patterns = [
            r'\bALT-\d{4}T\b',            # Matches ALT-0390T
            r'\bALT-\d{4}INOXB\b',        # Matches ALT-1271INOXB
            r'\bALEN \d+X\d+\b',          # Matches ALEN 5X40
            r'\bDCT-DTL\d+/\w+/\d+\b'     # Matches DCT-DTL289000/P1/17
        ]

        def fetch_replacement_code(code):
            url = f"{API_CONSULTA_STOCK_AGROTA}/{code}"
            response = requests.get(url)
            print(f"Fetching replacement for code: {code} - Status Code: {response.status_code}")
            if response.status_code == 200:
                print(f"Response JSON: {response.json()}")
                # return response.json().get('replacement_code', code)
                return json.dumps(response.json())
            else:
                return code

        def replace_match(match):
            return fetch_replacement_code(match.group(0))

        for pattern in patterns:
            text = re.sub(pattern, replace_match, text)

        pattern = re.compile(r'\{.*?\}', re.DOTALL)
        match = pattern.search(text)
        print('match', match.group(0))
        if match:
            json_string = match.group(0)
            return json_string
        return text
