#!/bin/bash
set -euo pipefail

# =====================================================
# NS20 AI Farm Report Generator
# FINAL / PRODUCTION READY
# =====================================================

BASE_DIR="$(cd "$(dirname "$0")" && pwd)"
REPORT_DIR="$BASE_DIR/reports"
RAW_DIR="$BASE_DIR/raw"

mkdir -p "$REPORT_DIR" "$RAW_DIR"

source "$BASE_DIR/openai_connect.inc"

# -----------------------------------------------------
# Argument check
# -----------------------------------------------------
DEVICEID="${1:-}"

if [ -z "$DEVICEID" ]; then
  echo "[ERROR] deviceid argument is required"
  exit 1
fi

# -----------------------------------------------------
# Device mapping check
# -----------------------------------------------------
if [ -z "${FARM_NAME[$DEVICEID]+x}" ]; then
  echo "[ERROR] Unknown deviceid: $DEVICEID"
  exit 1
fi

FARM="${FARM_NAME[$DEVICEID]}"
CROP="${CROP_TYPE[$DEVICEID]}"
TODAY=$(date +"%Y-%m-%d")
NOW_TS=$(date +"%Y%m%d_%H%M")

OUT_FILE="${DEVICEID}_${NOW_TS}.json"
RAW_FILE="$RAW_DIR/openai_raw_${DEVICEID}_${NOW_TS}.json"

echo "[INFO] DeviceID   : $DEVICEID"
echo "[INFO] Farm       : $FARM"
echo "[INFO] Crop       : $CROP"
echo "[INFO] ReportDate : $TODAY"

# -----------------------------------------------------
# Fetch environment summary (last 7 days)
# -----------------------------------------------------
ENV_SUMMARY=$(mysql -u"$MYSQL_USER" -p"$MYSQL_PASS" -h"$MYSQL_HOST" "$MYSQL_DB" -N -e "
SELECT
  CONCAT(
    '평균온도=', ROUND(AVG(temp),1),'°C, ',
    '평균습도=', ROUND(AVG(humidity),1),'%, ',
    '최고온도=', MAX(temp),'°C, ',
    '최저온도=', MIN(temp),'°C'
  )
FROM ns20_1
WHERE deviceid='$DEVICEID'
AND datetime >= DATE_SUB(NOW(), INTERVAL 7 DAY);
")

if [ -z "$ENV_SUMMARY" ]; then
  echo "[ERROR] Failed to fetch ENV_SUMMARY from MySQL"
  exit 1
fi

echo "[INFO] ENV_SUMMARY: $ENV_SUMMARY"

# -----------------------------------------------------
# Prompt (SAFE)
# -----------------------------------------------------
PROMPT=$(cat <<EOF
너는 스마트팜 전문 농업 컨설턴트 AI다.

[농장명] $FARM
[작목] $CROP
[기간] 최근 7일
[환경요약] $ENV_SUMMARY

아래 형식의 JSON으로만 응답하라.

{
  "summary": "운영자를 위한 한 줄 요약",
  "env_status": "적정 | 주의 | 위험",
  "crop_analysis": "작목 기준 해석",
  "recommendations": [
    "권장사항 1",
    "권장사항 2",
    "권장사항 3"
  ]
}
EOF
)

# -----------------------------------------------------
# OpenAI request (jq JSON + retry)
# -----------------------------------------------------
MAX_RETRY=3
RETRY=1
SUCCESS=0

while [ $RETRY -le $MAX_RETRY ]; do
  echo "[INFO] OpenAI request attempt $RETRY/$MAX_RETRY"

  REQUEST_JSON=$(jq -n \
    --arg model "$OPENAI_MODEL" \
    --arg system "You are an agricultural AI analyst." \
    --arg user "$PROMPT" \
    '{
      model: $model,
      messages: [
        {role: "system", content: $system},
        {role: "user", content: $user}
      ],
      temperature: 0.3
    }'
  )

  curl -s https://api.openai.com/v1/chat/completions \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $OPENAI_API_KEY" \
    -d "$REQUEST_JSON" \
    > "$RAW_FILE"

  # API error check
  if jq -e '.error' "$RAW_FILE" >/dev/null 2>&1; then
    echo "[WARN] OpenAI API error:"
    jq '.error.message' "$RAW_FILE"
  else
    # Extract content (string → JSON)
    jq -r '.choices[0].message.content' "$RAW_FILE" \
      | jq '.' > "$REPORT_DIR/$OUT_FILE" 2>/dev/null || true

    if [ -s "$REPORT_DIR/$OUT_FILE" ]; then
      SUCCESS=1
      break
    fi
  fi

  sleep 2
  RETRY=$((RETRY + 1))
done

if [ $SUCCESS -ne 1 ]; then
  echo "[ERROR] OpenAI failed after $MAX_RETRY attempts"
  exit 1
fi

# -----------------------------------------------------
# Save report metadata to MySQL
# -----------------------------------------------------
mysql -u"$MYSQL_USER" -p"$MYSQL_PASS" -h"$MYSQL_HOST" "$MYSQL_DB" -e "
INSERT INTO ns20_1_ai_report
(deviceid, farm_name, crop_type, report_date, json_file)
VALUES
('$DEVICEID', '$FARM', '$CROP', '$TODAY', '$OUT_FILE');
"

echo "[DONE] AI report generated successfully: $OUT_FILE"