import os
from flask import Blueprint, render_template, request, redirect, url_for, flash
from werkzeug.utils import secure_filename
from supabase import create_client, Client
from dotenv import load_dotenv

# 환경 변수 로드
load_dotenv()

bp = Blueprint('mod_requests', __name__, url_prefix='/mod-requests')

# Supabase 클라이언트 초기화
SUPABASE_URL = os.getenv('SUPABASE_URL')
SUPABASE_KEY = os.getenv('SUPABASE_KEY')
supabase: Client = create_client(SUPABASE_URL, SUPABASE_KEY)

@bp.route('/')
def mod_requests():
    """모드 요청 화면"""
    return render_template('mod_requests.html')

@bp.route('/submit', methods=['POST'])
def submit_mod_request():
    """모드 요청 제출"""
    # 폼 데이터 가져오기
    mod_name = request.form.get('mod_name')
    mod_file = request.files.get('mod_file')

    # 파일 확인
    if not mod_file or not mod_file.filename.endswith('.jar'):
        flash("Invalid file. Please upload a valid .jar file.", "danger")
        return redirect(url_for('mod_requests.mod_requests'))

    # 파일 이름 안전하게 변환
    filename = secure_filename(mod_file.filename)
    try:
        # 파일 내용을 바이너리로 읽기
        file_data = mod_file.read()

        # Supabase Storage에 업로드
        response = supabase.storage.from_('mods').upload(f"requests/{filename}", file_data)

        # 디버그 출력: 업로드 응답
        print(f"Supabase Storage upload response: {response}")

        # 업로드 성공 여부 확인
        if not response or not hasattr(response, 'path'):
            raise Exception("Upload failed: Invalid response object")

    except Exception as e:
        # 업로드 실패 처리
        print(f"File upload failed: {e}")
        flash(f"File upload failed: {e}", "danger")
        return redirect(url_for('mod_requests.mod_requests'))

    # 요청 데이터 저장
    try:
        supabase.table('mod_requests').insert({
            "name": mod_name,
            "file_path": f"requests/{filename}",
            "status": "pending"
        }).execute()
        flash("Mod request submitted successfully.", "success")
    except Exception as e:
        print(f"Failed to save mod request: {e}")
        flash(f"Failed to save mod request: {e}", "danger")
        return redirect(url_for('mod_requests.mod_requests'))

    return redirect(url_for('mod_requests.mod_requests'))
