from quart import Quart, request, jsonify
import asyncio
import logging
import json

app = Quart(__name__)

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

async def run_scraper_process(data):
    process = await asyncio.create_subprocess_exec(
        'python3', 'scraper-script.py',
        stdin=asyncio.subprocess.PIPE,
        stdout=asyncio.subprocess.PIPE,
        stderr=asyncio.subprocess.PIPE
    )

    stdout, stderr = await 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'])
async def scrape():
    try:
        data = await request.get_json()
        
        logger.info(f"Received scrape request for URL: {data.get('url')}")

        result = await 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)
