from flask import Flask, request, jsonify
import subprocess
import json
import logging

app = Flask(__name__)

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

def run_scraper_process(data):
    process = subprocess.Popen(
        ['python3', 'scraper-worker.py'],
        stdin=subprocess.PIPE,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE
    )

    stdout, stderr = process.communicate(json.dumps(data).encode())

    if process.returncode != 0:
        logger.error(f"Scraper script error: {stderr.decode()}")
        raise Exception("Scraper script failed")

    return json.loads(stdout.decode())

@app.route('/scrape', methods=['POST'])
def scrape():
    try:
        data = request.json
        
        logger.info(f"Received scrape request for URL: {data.get('url')}")

        result = run_scraper_process(data)
        return jsonify(result)

    except Exception as e:
        logger.error(f"Unhandled error in scrape endpoint: {e}")
        return jsonify({'error': f'Unhandled error: {str(e)}'}), 500

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5697, threaded=True)

