import mdtex2html
from flask import Flask, request, jsonify
from chat import converse
import json
from flask_cors import CORS

AVAIABLETOOLS = [
    {
        "name": "search",
        "description": "Search Internet For Related Query and Provide Uptodate query",
        "parameters": {
            "type": "object",
            "properties": {
                "query": {
                    "type": "string",
                    "description": "Search Query Follow the General Search Methods to get better result"
                }
            },
            "required": ["query"]
        }
    }
]

def ToolSelector(other):
    toreturn = []
    if(type(other['tools']) == list):
        try:
            tools = other['tools']
            for tool in tools:
                for thistool in AVAIABLETOOLS:
                    if(thistool['name'] == tool):
                        toreturn.append(thistool)
                    else:
                        pass
        except:
            pass
    else:
        raise Exception('tools is not provided in list formate')
    print(toreturn)
    return toreturn
app = Flask(__name__)
CORS(app)
@app.route("/", methods=['GET', 'POST'])
def home():
    # try:
    par = request.get_json()
    if not par:
        return jsonify({"error": "Invalid JSON input"}), 400
    
    conversation = par.get('conversation')
    provider = par.get('provider')
    model = par.get('model')
    api = par.get('api')
    try:
        other = par.get('other')
        selectedtools = ToolSelector(other)
        other['tools'] = selectedtools
    except:
        other = {}
    
    if not all([conversation, provider, model, api]):
        return jsonify({"error": "Missing required parameters"}), 400
    print(json.dumps(other,indent=4))
    load = json.loads(converse(conversation, provider, model, api,other=other))
    load['DirectResult'] = load['content']
    
    try:
        load['content'] = mdtex2html.convert(load['content'])
    except Exception as e:
        return jsonify({"error": f"Error converting content: {str(e)}"}), 500
    
    toreturn = json.dumps(load, indent=4)
    # print(toreturn)
    return toreturn, 200

    # except Exception as e:
    #     return jsonify({"error": str(e)}), 500

if __name__ == "__main__":
    app.run(host='0.0.0.0', debug=True, port=1777)