<?php

namespace Joydea\RichEditor\View\Components;

use Illuminate\Contracts\View\View;
use Illuminate\View\Component;

class RichEditor extends Component
{
    /**
     * @param  string        $name        送信される textarea の name（＝サーバはこの name で Markdown を受け取る）
     * @param  string|null   $value       初期 Markdown（old() などを渡す）
     * @param  string        $placeholder プレースホルダ
     * @param  string|null   $id          textarea の id
     * @param  string|null   $uploadUrl   画像アップロード先（CSRF付きPOST・{url,alt} を JSON で返す）。未指定で画像ブロック非表示
     * @param  array         $mentions    @メンション候補 [{name, avatar, initials}]
     * @param  string|null   $minHeight   本文の最小高さ（例 "180px"）。未指定は config('rich-editor.min_height')
     * @param  string|null   $draftKey    下書き（localStorage 復元）の明示キー
     * @param  bool          $drafts      下書きを有効にするか
     * @param  bool          $compact     コンパクト表示（「＋」ハンドルを小さく）
     */
    public function __construct(
        public string $name,
        public ?string $value = null,
        public string $placeholder = '',
        public ?string $id = null,
        public ?string $uploadUrl = null,
        public array $mentions = [],
        public ?string $minHeight = null,
        public ?string $draftKey = null,
        public bool $drafts = true,
        public bool $compact = false,
    ) {
    }

    /** メンション候補を data 属性用の JSON へ（候補が無ければ空文字＝属性を出さない）。 */
    public function mentionsJson(): string
    {
        return $this->mentions
            ? (string) json_encode(array_values($this->mentions), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)
            : '';
    }

    public function render(): View
    {
        return view('rich-editor::components.rich-editor');
    }
}
