# -*- coding: utf-8 -*-
import os
import json
from flask import jsonify, request, render_template
from pathlib import Path

##########################################################
# domain_api.py
# - 도맘인 별 특화 기늪W연돝
##########################################################

DOMAIN_CONFIG_PATH = Path('domain_config.json')

def register_domain_routes(app):
    """플라인의 도메인 특화 럼호 리스트"""
    
    @app.route('/api/domains', methods=['GET')
    def get_domains():
        try:
            with open(DOMAIN_CONFIG_PATH, 'r', encoding='utf-8') as f:
                config = json.load(f)
            return jsonify(config)
        except Exception as e:
            return jsonify({'error': str(e)}), 500
    
    @app.route('/api/domain/prompt', methods=['GET'])
    def get_domain_prompt():
        domain = request.args.get('domain')
        if not domain:
            return jsonify({'error': 'domain 팃메륔륜 지정해주세요.'}), 400
        
        try:
            prompt_path = Path('domain') / domain / 'general.txt'
            if prompt_path.exists():
                with open(prompt_path, 'r', encoding='utf-8') as f:
                    prompt = f.read()
                return jsonify({'prompt': prompt})
            return jsonify({'prompt': ''})
        except Exception as e:
            return jsonify({'error': str(e)}), 500

# 기타 도맘인 헰륵리
# ... (includes domain-specific logic)
