<?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 ] : '';

    }



}

