# ============================================================
# .env.example  →  cp .env.example .env  후 값 채워서 사용
# 모든 run.sh / scripts 가 이 파일을 source 합니다.
# 절대 .env 자체를 git 에 올리지 마세요 (.gitignore 등록됨).
# ============================================================

# --- (1) 클라이언트 도구 경로 ---
# Oracle Instant Client (sqlplus) 가 PATH 에 있어야 함.
# macOS 예: /Users/<you>/devkit/instantclient
# Linux 예: /opt/oracle/instantclient_21_12
export PATH="${HOME}/devkit/instantclient:${PATH}"

# Oracle wallet 디렉토리 (cwallet.sso, tnsnames.ora 포함된 풀린 경로)
export TNS_ADMIN=""                                              # 예: /Users/you/devkit/Wallet_D8AUKRO81636MON0

# --- (2) ADB 접속 ---
export ADB_TNS=""                                                # tnsnames.ora alias (예: d8aukro81636mon0_tp)
export ADB_USER="admin"
export ADB_PASSWORD=""                                           # 비워두면 run.sh 가 read -s 로 프롬프트
export BACKOFFICE_DB_URL="jdbc:oracle:thin:@${ADB_TNS}?TNS_ADMIN=${TNS_ADMIN}"
export BACKOFFICE_DB_USERNAME="${ADB_USER}"
export BACKOFFICE_DB_PASSWORD="${ADB_PASSWORD}"
# 편의: sqlplus 한 줄 connect 문자열 (자동 합성됨; 직접 안 건드려도 됨)
# export ADB_CONN="${ADB_USER}/${ADB_PASSWORD}@${ADB_TNS}"

# --- (2b) Spring Boot 백오피스 ---
export BACKOFFICE_ADMIN_USER="admin"
export BACKOFFICE_ADMIN_PASSWORD="admin"
# 운영에서는 최초 한 번 생성한 {bcrypt} 해시를 .env에 보관합니다. 이를 사용하면
# 지속 로그인 쿠키가 앱 재기동 후에도 유효합니다. 원문 비밀번호 값은 Git에 넣지 마세요.
export BACKOFFICE_ADMIN_PASSWORD_HASH=""
# 읽기 전용 조회 계정. 활성화하면 ROLE_VIEWER로 로그인 가능하며 POST/PUT/PATCH/DELETE는 차단됩니다.
export BACKOFFICE_GUEST_ENABLED="false"
export BACKOFFICE_GUEST_USER="guest"
export BACKOFFICE_GUEST_PASSWORD=""
export BACKOFFICE_GUEST_PASSWORD_HASH=""
# 로컬 HTTP 개발 기본값. 외부 VM 배포 스크립트는 loopback/HTTPS 안전값으로 덮어씁니다.
export BACKOFFICE_BIND_ADDRESS="0.0.0.0"
export BACKOFFICE_FORWARD_HEADERS_STRATEGY="none"
export BACKOFFICE_REQUIRE_HTTPS="false"
export BACKOFFICE_SESSION_COOKIE_SECURE="false"
# HTTPS에서만 사용. key는 배포 환경의 secret으로 32자 이상 임의값을 넣고 Git에 저장하지 않습니다.
export BACKOFFICE_REMEMBER_ME_ENABLED="false"
export BACKOFFICE_REMEMBER_ME_KEY=""
export BACKOFFICE_REMEMBER_ME_DAYS="14"
export BACKOFFICE_ORDS_BASE_URL="https://yh0olybn5pqce4n-d8aukro81636mon0.adb.ap-seoul-1.oraclecloudapps.com/ords"
export BACKOFFICE_ORDS_TIMEOUT_SECONDS="10"
# ORDS metadata 생성/수정 전용 계정. 비워두면 BACKOFFICE_DB_* 연결을 사용하므로
# ADMIN으로 실행 중이면 Handler 생성은 막히고 소스 보기만 사용합니다.
export BACKOFFICE_ORDS_DB_URL="${BACKOFFICE_DB_URL}"
export BACKOFFICE_ORDS_DB_USERNAME="CB_ORDS"
export BACKOFFICE_ORDS_DB_PASSWORD=""

# Select AI는 프로파일 소유 스키마로 별도 접속합니다.
# 원문 비밀번호는 .env 또는 배포 환경 secret에만 두며 Git에 올리지 않습니다.
export BACKOFFICE_SELECT_AI_DB_URL="${BACKOFFICE_DB_URL}"
export BACKOFFICE_SELECT_AI_DB_USERNAME=""
export BACKOFFICE_SELECT_AI_DB_PASSWORD=""
export BACKOFFICE_SELECT_AI_PROFILE=""
export BACKOFFICE_SELECT_AI_FEW_SHOT_ENABLED="true"
export BACKOFFICE_SELECT_AI_FEW_SHOT_TOP_K="3"

# 공통 데이터 카탈로그. objects는 key/tableName/objectType/businessName/description JSON 배열입니다.
# 배포 환경마다 반드시 실제 소유자와 허용 객체를 지정합니다.
export BACKOFFICE_CATALOG_OWNER="APP_OWNER"
export BACKOFFICE_CATALOG_OBJECTS='[{"key":"customers","tableName":"CUSTOMER","objectType":"TABLE","businessName":"고객","description":"고객 기본 정보"}]'
export BACKOFFICE_PRODUCT_NAME="Data & AI Backoffice"
export BACKOFFICE_PRODUCT_TITLE="Data & AI Backoffice"
export BACKOFFICE_PRODUCT_DATA_LABEL="업무 데이터"
export BACKOFFICE_MCP_TOOL_NAME="oracle.select_ai.data_text2sql"
export BACKOFFICE_MCP_TOOL_LABEL="업무 데이터 Text2SQL"
export BACKOFFICE_MCP_TOOL_DESCRIPTION="승인된 업무 데이터에 대해 읽기 전용 SQL을 생성하고 실행합니다."
export BACKOFFICE_MCP_PROMPT_DESCRIPTION="업무 데이터에서 조회할 내용을 자연어로 입력합니다."
export BACKOFFICE_MCP_SHOWPROMPT_TOOL_NAME="oracle.select_ai.data_showprompt"
export BACKOFFICE_MCP_SHOWPROMPT_TOOL_LABEL="업무 데이터 SHOWPROMPT"
export BACKOFFICE_MCP_SHOWPROMPT_TOOL_DESCRIPTION="Select AI가 SQL 생성에 사용한 prompt를 조회하는 읽기 전용 진단 도구입니다."
# Select AI few-shot 예제 SQL 조회·저장 MCP. 운영 환경은 고객별 도구명과 안내문만 변경합니다.
export BACKOFFICE_MCP_QA_VECTOR_SEARCH_TOOL_NAME="oracle.select_ai.qa_vector_search"
export BACKOFFICE_MCP_QA_VECTOR_SEARCH_TOOL_LABEL="Select AI 예제 SQL 조회"
export BACKOFFICE_MCP_QA_VECTOR_SEARCH_TOOL_DESCRIPTION="현재 질문에 사용할 유사 예제 SQL을 Select AI 실행 전에 조회합니다."
export BACKOFFICE_MCP_QA_VECTOR_STORE_TOOL_NAME="oracle.select_ai.qa_vector_store"
export BACKOFFICE_MCP_QA_VECTOR_STORE_TOOL_LABEL="Select AI 예제 SQL 저장"
export BACKOFFICE_MCP_QA_VECTOR_STORE_TOOL_DESCRIPTION="검토된 Select AI 결과를 후속 Text2SQL 품질 향상용 예제 SQL로 저장합니다."
# 마스킹 관리 대상. objectName/policyName JSON 배열이며, 비우면 어떤 DB 정책도 관리하지 않습니다.
export BACKOFFICE_MASKING_POLICIES=''
# 보안 SQL 화면에 노출할 번들 SQL. fileName은 패키지의 sql/adb/ 아래 파일명만 허용됩니다.
export BACKOFFICE_SECURITY_SQL_SCRIPTS=''

# --- (2c) OpenAI 호환 AI 호출 (MCP-style Reasoning 탭) ---
export BACKOFFICE_AI_ENABLED="false"
export BACKOFFICE_AI_PROVIDER="openai"                          # openai | oci
export BACKOFFICE_AI_BASE_URL=""                                # 예: https://inference.generativeai.us-chicago-1.oci.oraclecloud.com
export BACKOFFICE_AI_MODEL=""                                   # 예: openai.gpt-5.4-mini
export BACKOFFICE_AI_API_KEY=""
export BACKOFFICE_AI_TIMEOUT_SECONDS="30"
# provider=oci이면 API key를 환경 변수로 복제하지 않고 OCI config profile로 요청에
# 서명합니다. POC3_LLM_GPT55_OCI_*/OCI_GENAI_*가 있으면 아래 BACKOFFICE_* 값보다
# fallback으로 사용됩니다.
export BACKOFFICE_AI_OCI_CONFIG_FILE=""
export BACKOFFICE_AI_OCI_PROFILE="DEFAULT"
export BACKOFFICE_AI_OCI_REGION=""
export BACKOFFICE_AI_OCI_COMPARTMENT_ID=""

# 로컬 키 별칭은 .env에만 저장하세요. .env.example에는 원문 키를 넣지 않습니다.
export VPDTEST1_API_KEY=""
export VPDTEST2_API_KEY=""

# --- (3) 데모용 ADB 엔드유저 비밀번호 (sql/adb/07_end_users.sql 에서 사용) ---
# ADB 비번 정책: 12자 이상, 대/소/숫자/특수 조합.
# 4명의 데모 유저:
#   vpduser_my   → MySQL view 만 SELECT 가능
#   vpduser_pg   → Postgres view 만 SELECT 가능
#   vpduser_both → 양쪽 view 모두 SELECT 가능
#   vpduser_none → 양쪽 view 모두 fail-closed (0 rows)
export VPDUSER_MY_PASSWORD="RowFilter#My2026"
export VPDUSER_PG_PASSWORD="RowFilter#Pg2026"
export VPDUSER_BOTH_PASSWORD="RowFilter#Both26"
export VPDUSER_NONE_PASSWORD="RowFilter#None26"

# --- (3b) OPTIONAL — DDS 변형 데모용 엔드유저 비밀번호 ---
# sql/adb/13_dds_variant.sql (Oracle 26ai Deep Data Security 재구현) 에서만 사용.
# 동일한 4-user 매트릭스를 declarative Data Grants 로 재현. VPD 데모와 공존.
export DDSUSER_MY_PASSWORD="DdsGrant#My2026"
export DDSUSER_PG_PASSWORD="DdsGrant#Pg2026"
export DDSUSER_BOTH_PASSWORD="DdsGrant#Both26"
export DDSUSER_NONE_PASSWORD="DdsGrant#None26"
export DDSUSER_TOKEN_PASSWORD="DdsGrant#Token26"

# --- (3c) DDS MCP SSE · OCI IAM Confidential Application ---
# 실제 값은 .env 또는 배포 환경의 secret store에만 둔다.
export DDS_OCI_IAM_CLIENT_ID=""
export DDS_OCI_IAM_CLIENT_SECRET=""
export DDS_OCI_IAM_DOMAIN_URL=""       # 예: https://idcs-<unique>.identity.oraclecloud.com
export DDS_OCI_IAM_DATABASE_SCOPE=""   # OCI IAM의 DB resource scope
export DDS_OCI_IAM_TOKEN_URI=""         # 비우면 ${DDS_OCI_IAM_DOMAIN_URL}/oauth2/v1/token
export DDS_OCI_IAM_TIMEOUT_SECONDS="10s"
export DDS_OCI_IAM_REFRESH_SKEW_SECONDS="60s"
export DDS_MCP_BASE_URL="http://127.0.0.1:8083"
export DDS_MCP_TEST_BEARER=""           # 발급한 활성 CB_APP_USER Bearer만 로컬 테스트에 사용

# --- (4) 원격 Postgres (AWS RDS, Cloud SQL, ...) ---
# sql/source/postgres_setup.sql 가 여기로 customers 테이블/seed 생성.
# ADB 의 RDS_POSTGRES_LINK 가 이 인스턴스를 가리킴.
export PG_HOST=""                                                # 예: vpd-poc.xxxxx.ap-northeast-2.rds.amazonaws.com
export PG_PORT="5432"
export PG_DB="vpdpoc"                                            # CREATE DATABASE 미리 되어 있어야 함
export PG_USER="postgres"
export PG_PASSWORD=""

# --- (5) 원격 MySQL ---
export MY_HOST=""
export MY_PORT="3306"
export MY_DB="ecommerce_poc"                                     # CREATE DATABASE 미리 되어 있어야 함
export MY_USER="admin"
export MY_PASSWORD=""

# --- (6) ADB → 원격 DB Link 이름 (관례적으로 고정 — 굳이 안 바꿔도 됨) ---
export DBLINK_PG_NAME="RDS_POSTGRES_LINK"
export DBLINK_MY_NAME="RDS_LINK"

# --- (7) Redmine (project tracker) ---
export REDMINE_URL=https://redmine.example.com
export REDMINE_API_KEY=<your-redmine-api-key>

# --- (8) Gitea (self-hosted git) ---
export GITEA_URL=https://gittea.example.com
export GITEA_USER=<your-gitea-login>
export GITEA_PASSWORD=<your-gitea-password>
export GITEA_TOKEN=<minted-from-the-above>
