from flask import Flask, request, jsonify
import boto3
import requests
import urllib3
from botocore.exceptions import ClientError

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

app = Flask(__name__)

@app.route("/uploadFile", methods=["POST"])
def upload_quiz():
    try:
        quiz_id = request.json.get("quiz_id")
        sec_id = request.json.get("sec_id")
        quiz_name = request.json.get("quiz_name")
        host_college_id = request.json.get("host_college_id")

        # --- AWS role + region (your existing setup) ---
        role_arn = "arn:aws:iam::334835636290:role/quiklrn_lambda"
        session_name = "AssumeRoleSession1"
        region = "ap-south-1"
        s3_bucket_name = "quiklrnexam"
        s3_file_key = f"quiz_{quiz_id}.csv"

        # File URL to fetch
        file_url_to_download = f"https://awsdev.quiklrn.com/admin/college/quiz.php?method=download&sec_id={sec_id}&quiz_id={quiz_id}"

        # Assume role
        sts_client = boto3.client('sts')
        assumed_role_object = sts_client.assume_role(
            RoleArn=role_arn,
            RoleSessionName=session_name
        )
        credentials = assumed_role_object['Credentials']

        session = boto3.Session(
            aws_access_key_id=credentials['AccessKeyId'],
            aws_secret_access_key=credentials['SecretAccessKey'],
            aws_session_token=credentials['SessionToken'],
            region_name=region
        )

        # Download quiz file
        resp = requests.get(file_url_to_download, stream=True, verify=False)
        resp.raise_for_status()

        # Upload to S3
        s3_client = session.client('s3')
        s3_client.put_object(Bucket=s3_bucket_name, Key=s3_file_key, Body=resp.content)

        # Construct file URL
        s3_url = f"https://{s3_bucket_name}.s3.{region}.amazonaws.com/{s3_file_key}"

        # Save metadata in DynamoDB
        dynamodb = session.resource('dynamodb')
        table = dynamodb.Table("quiz")
        table.put_item(Item={
            "quiz_id": quiz_id,
            "quiz_name": quiz_name,
            "host_college_id": host_college_id,
            "quiz_file_link": s3_url
        })

        return jsonify({"status": "success", "s3_url": s3_url}), 200

    except ClientError as e:
        return jsonify({"status": "error", "message": e.response['Error']['Message']}), 500
    except Exception as e:
        return jsonify({"status": "error", "message": str(e)}), 500


if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)
