from app import app
from flask import render_template
from nlp.ProductNLPExtractor import ProductNLPExtractor
from flask import request
import os, json
import traceback
import shutil
from datetime import datetime

productNLP = ProductNLPExtractor()

@app.route('/product/nlp/tags')
def home():
    data = request.args.get("data")
    doc = productNLP.extactTagsAndData(data)

    result = { 'entities': [{"text": ent.text, "label" : ent.label_} for ent in doc.ents],
            'tokens': [{"text": t.text, "type" : t.ent_type_ , "iob" : t.ent_iob} for t in doc]};
    # Pass data to the template by adding arguments
    return {"status" : "1001", "message": "Tags extracted successfully!", "data": result, "search_term": "search_term", "count": "count"}

@app.post('/product/nlp/workspace',)
def workspace():
    data = request.get_json()

    with open('trash_data/product_data.txt', 'w') as file:
        json.dump(data, file)

    return {"status" : "1001", "message": "Workspace saved successfileully!"}

@app.get('/product/nlp/workspace',)
def load_workspace():
    timestamp = datetime.now().strftime("%Y%m%d-%H%M%S")

    data = ''

    try:
        with open('trash_data/product_data.txt', 'r') as file:
            data = json.load(file)
    except Exception:
        return {"status" : "-1001", "message": "Workspace coudnt be loaded successfully!", "data": {}, "error": traceback.format_exc()}
    
    return {"status" : "1001", "message": "Workspace loaded successfully!", "data": data}

@app.delete('/product/nlp/workspace')
def clear_workspace():
    data = ''
    timestamp = datetime.now().strftime("%Y%m%d-%H%M%S")
    file_name, file_ext = os.path.splitext('product_data.txt')
    backup_filename = f"{file_name}_{timestamp}{file_ext}"
    shutil.copy2('trash_data/product_data.txt', f"trash_data/{backup_filename}")

    with open('trash_data/product_data.txt', 'w') as file:
        file.write(data)

    return {"status" : "1001", "message": "Workspace cleared successfully!"}
