<?php
if ( ! defined( 'ABSPATH' ) ) exit;

/**
 * 画像生成スタイル定義 + プロバイダ別スタイル一覧
 *
 * 元 includes/class-aiap-image-client.php から分離。
 * 各 AI 画像プロバイダ (DALL-E, Imagen, Stability, Flux) で利用可能な
 * スタイル一覧と、UI 表示用のプロンプト変換を集約。
 */
class AIAP_Image_Styles {

    /**
     * スタイル選択肢
     */
    public static function get_style_options() {
        return array(
            'auto', 'photo', 'natural', 'vivid', 'illustration', 'digital_art',
            'watercolor', 'oil_painting', '3d_render', 'anime',
            'flat_design', 'minimalist', 'cinematic', 'isometric',
        );
    }


    /**
     * Stability AI のスタイル定義(内部利用)
     */
    public static function get_stability_style_list() {
        return array(
            'none'             => array( 'icon' => '⚪', 'label_key' => 'imgstyle_none' ),
            '3d-model'         => array( 'icon' => '🧊', 'label_key' => 'imgstyle_3d-model' ),
            'analog-film'      => array( 'icon' => '🎞', 'label_key' => 'imgstyle_analog-film' ),
            'anime'            => array( 'icon' => '🎌', 'label_key' => 'imgstyle_anime' ),
            'cinematic'        => array( 'icon' => '🎬', 'label_key' => 'imgstyle_cinematic' ),
            'comic-book'       => array( 'icon' => '💥', 'label_key' => 'imgstyle_comic-book' ),
            'digital-art'      => array( 'icon' => '💻', 'label_key' => 'imgstyle_digital-art' ),
            'enhance'          => array( 'icon' => '✨', 'label_key' => 'imgstyle_enhance' ),
            'fantasy-art'      => array( 'icon' => '🐉', 'label_key' => 'imgstyle_fantasy-art' ),
            'isometric'        => array( 'icon' => '📦', 'label_key' => 'imgstyle_isometric' ),
            'line-art'         => array( 'icon' => '✏️', 'label_key' => 'imgstyle_line-art' ),
            'low-poly'         => array( 'icon' => '🔷', 'label_key' => 'imgstyle_low-poly' ),
            'modeling-compound'=> array( 'icon' => '🧱', 'label_key' => 'imgstyle_modeling-compound' ),
            'neon-punk'        => array( 'icon' => '💫', 'label_key' => 'imgstyle_neon-punk' ),
            'origami'          => array( 'icon' => '🦢', 'label_key' => 'imgstyle_origami' ),
            'photographic'     => array( 'icon' => '📷', 'label_key' => 'imgstyle_photographic' ),
            'pixel-art'        => array( 'icon' => '👾', 'label_key' => 'imgstyle_pixel-art' ),
            'tile-texture'     => array( 'icon' => '🧩', 'label_key' => 'imgstyle_tile-texture' ),
        );
    }

    /**
     * Imagen / Flux 共通の汎用スタイル定義(内部利用)
     */
    public static function get_generic_style_list() {
        return array(
            'none'         => array( 'icon' => '⚪', 'label_key' => 'imgstyle_none' ),
            'realistic'    => array( 'icon' => '📷', 'label_key' => 'imgstyle_realistic' ),
            'cartoon'      => array( 'icon' => '🖍', 'label_key' => 'imgstyle_cartoon' ),
            'anime'        => array( 'icon' => '🎌', 'label_key' => 'imgstyle_anime' ),
            '3d-render'    => array( 'icon' => '🧊', 'label_key' => 'imgstyle_3d-render' ),
            'watercolor'   => array( 'icon' => '🎨', 'label_key' => 'imgstyle_watercolor' ),
            'oil-painting' => array( 'icon' => '🖼', 'label_key' => 'imgstyle_oil-painting' ),
            'flat-design'  => array( 'icon' => '📐', 'label_key' => 'imgstyle_flat-design' ),
            'pixel-art'    => array( 'icon' => '👾', 'label_key' => 'imgstyle_pixel-art' ),
        );
    }

    /**
     * プロバイダごとのスタイル選択肢定義
     *
     * モデルIDを渡すと、そのモデルがサポートするスタイルのみを返す。
     * モデル未指定時は後方互換として設定DBから現在のモデルを引く。
     *
     * @param string $provider プロバイダキー
     * @param string $model    モデルID (省略可)
     * @return array
     */
    public static function get_provider_styles( $provider, $model = '' ) {
        $caps = AIAP_Image_Providers::get_model_capabilities( $provider, $model );
        return $caps['styles'];
    }

    /**
     * (旧APIの互換用) プロバイダ直指定時のスタイル一覧を返す。
     * 新規コードでは get_provider_styles() を使うこと。
     * 既存の保存値検証など、プロバイダの全サポートスタイルを列挙したい時に使用。
     */
    public static function get_provider_all_styles( $provider ) {
        switch ( $provider ) {
            case 'dalle3':
                return array(
                    'natural' => array( 'icon' => '🌿', 'label_key' => 'imgstyle_natural' ),
                    'vivid'   => array( 'icon' => '🎨', 'label_key' => 'imgstyle_vivid' ),
                );

            case 'stability':
                return self::get_stability_style_list();

            case 'imagen':
            case 'flux':
                return self::get_generic_style_list();
        }
        return array();
    }

    /**
     * 汎用スタイルキーをプロンプト用の英語フレーズに変換
     */
    public static function style_to_prompt_text( $style ) {
        $map = array(
            'realistic'    => 'photorealistic photography style',
            'cartoon'      => 'hand-drawn cartoon illustration style',
            'anime'        => 'anime/manga style',
            '3d-render'    => '3D rendered style',
            'watercolor'   => 'watercolor painting style',
            'oil-painting' => 'oil painting style',
            'flat-design'  => 'flat design, simple shapes',
            'pixel-art'    => 'pixel art style',
        );
        return isset( $map[ $style ] ) ? $map[ $style ] : '';
    }

}
