from flask import Flask, render_template, request, jsonify
from flask_wtf.csrf import CSRFProtect, CSRFError
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address
from parrot import Parrot
import warnings

warnings.filterwarnings("ignore")

app = Flask(__name__)
app.secret_key = 'your-secret-key-change-this'

# Security
csrf = CSRFProtect(app)

# Rate limiter
limiter = Limiter(get_remote_address, app=app, default_limits=["200 per day", "50 per hour"])

# Load model
parrot = Parrot(model_tag="prithivida/parrot_paraphraser_on_T5")

@app.errorhandler(CSRFError)
def handle_csrf(e):
    return jsonify({'error': 'CSRF token missing/invalid'}), 400

@app.route('/', methods=['GET'])
def home():
    return render_template('index.html')

@app.route('/paraphrase', methods=['POST'])
@csrf.exempt
@limiter.limit("5 per minute")
def paraphrase():
    data = request.get_json()
    text = data.get('text', '').strip()
    if len(text) > 500 or len(text) < 1:
        return jsonify({'error': 'Text must be 1-500 chars'}), 400
    if not text.replace(' ', '').isprintable():
        return jsonify({'error': 'Invalid characters'}), 400
    para_phrases = parrot.augment(input_phrase=text, use_gpu=False, max_return_phrases=3)
    if para_phrases:
        return jsonify({'paraphrases': [p[0] for p in para_phrases]})
    return jsonify({'error': 'No paraphrases generated'}), 500

if __name__ == '__main__':
    app.run()






# from flask import Flask, render_template, request, jsonify
# from flask_wtf.csrf import CSRFProtect
# from parrot import Parrot
# import warnings
# # from flask_limiter import Limiter;
# # limiter = Limiter(app, default_limits=["200 per day", "50 per hour"]);
# # @limiter.limit("5 per minute") on / route.

# warnings.filterwarnings("ignore")

# app = Flask(__name__)
# app.secret_key = 'your-secret-key-change-this'  # Change to random string
# csrf = CSRFProtect(app)

# parrot = Parrot(model_tag="prithivida/parrot_paraphraser_on_T5")

# @app.route('/', methods=['GET', 'POST'])
# def index():
#     if request.method == 'POST':
#         text = request.form['text'].strip()
#         if len(text) > 500 or len(text) < 1:
#             return jsonify({'error': 'Text must be 1-500 chars'}), 400
#         if not text.replace(' ', '').isprintable():  # Sanitize: block non-printable
#             return jsonify({'error': 'Invalid characters'}), 400
#         para_phrases = parrot.augment(input_phrase=text, use_gpu=False, max_return_phrases=3)
#         if para_phrases:
#             return jsonify({'paraphrases': [p[0] for p in para_phrases]})
#         return jsonify({'error': 'No paraphrases generated'}), 500
#     return render_template('index.html')

# if __name__ == '__main__':
#     app.run()