from flask import Flask, request, Response
from dotenv import load_dotenv
import csv
import json
import os

app = Flask(__name__)

# APIキー
load_dotenv(dotenv_path="/var/www/api/.env")

# 環境変数からAPI_KEYを取得
API_KEY = os.getenv("API_KEY")
if API_KEY is None:
    # API_KEYが読み込めなかった場合のハンドリング（任意ですが推奨）
    print("Warning: API_KEY environment variable not set. Check your .env file.")
    # アプリケーションを終了させるか、デフォルト値を設定するなど、適切なエラーハンドリングを行う
    # 例: raise ValueError("API_KEY is not set.")

CSV_FILE_PATH = "/var/www/api/crews.csv"

@app.route("/", methods=["GET"])
def get_crews():
    # APIキーを確認
    if request.headers.get("X-API-KEY") != API_KEY:
        return Response(
            json.dumps({"error": "Unauthorized"}),
            status=401,
            mimetype="application/json"
        )

    # クエリパラメータ取得
    target_email = request.args.get("email")
    fields_param = request.args.get("fields")

    # fields をリストに変換（例: fields=email,name）
    requested_fields = (
        [field.strip() for field in fields_param.split(",")]
        if fields_param else None
    )

    # ここにデバッグ用のprint文を追加
    print(f"Received fields_param: {fields_param}")
    print(f"Parsed requested_fields: {requested_fields}")

    # CSV読み込み
    try:
        with open(CSV_FILE_PATH, newline='', encoding="utf-8") as csvfile:
            reader = csv.DictReader(csvfile)
            # ヘッダーを確認するデバッグ
            print(f"CSV Headers: {reader.fieldnames}")
            data = []

            for row in reader:
                # デバッグ: 処理中の行のキーを確認
                # print(f"Processing row with keys: {row.keys()}")
                if target_email and row.get("Email") != target_email:
                    continue

                if requested_fields:
                    # デバッグ: フィルタリング前の行
                    # print(f"Original row: {row}")
                    filtered_row = {key: row[key] for key in requested_fields if key in row}
                    # デバッグ: フィルタリング後の行
                    # print(f"Filtered row: {filtered_row}")
                else:
                    filtered_row = row

                data.append(filtered_row)

            if target_email:
                # 対象が1件なら1件だけ返す
                data = data[0] if data else {}

        return Response(
            json.dumps(data, ensure_ascii=False),
            status=200,
            mimetype="application/json"
        )

    except FileNotFoundError:
        return Response(
            json.dumps({"error": "CSV file not found"}),
            status=500,
            mimetype="application/json"
        )
    except Exception as e:
        return Response(
            json.dumps({"error": str(e)}),
            status=500,
            mimetype="application/json"
        )


