<?php

namespace App\Services;

use App\Models\SurveyResponse;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;

class ClaudeService
{
    protected string $apiKey;
    protected string $model;
    protected string $baseUrl = 'https://api.anthropic.com/v1/messages';

    public function __construct()
    {
        $this->apiKey = config('services.claude.api_key', env('ANTHROPIC_API_KEY', ''));
        $this->model  = config('services.claude.model', 'claude-haiku-4-5-20251001');
    }

    /**
     * Survey response-оос персонализ хийсэн тайлан үүсгэх.
     */
    public function generateSurveyInsights(SurveyResponse $survey): ?array
    {
        if (empty($this->apiKey)) {
            Log::warning('Claude API key not configured');
            return null;
        }

        $prompt = $this->buildPrompt($survey);

        try {
            $response = Http::withHeaders([
                'x-api-key'         => $this->apiKey,
                'anthropic-version' => '2023-06-01',
                'content-type'      => 'application/json',
            ])->timeout(60)->post($this->baseUrl, [
                'model'      => $this->model,
                'max_tokens' => 2500,
                'messages'   => [[
                    'role'    => 'user',
                    'content' => $prompt,
                ]],
            ]);

            if (! $response->successful()) {
                Log::error('Claude API error', ['status' => $response->status(), 'body' => $response->body()]);
                return null;
            }

            $content = $response->json('content.0.text');
            if (! $content) return null;

            // JSON хариултыг parse хийх
            $content = preg_replace('/^```json\s*|\s*```$/m', '', trim($content));
            $parsed = json_decode($content, true);
            if (json_last_error() !== JSON_ERROR_NONE) {
                Log::error('Claude returned invalid JSON', ['content' => $content, 'error' => json_last_error_msg()]);
                return null;
            }

            return $parsed;

        } catch (\Exception $e) {
            Log::error('Claude API exception', ['msg' => $e->getMessage()]);
            return null;
        }
    }

    /**
     * Prompt-ыг survey response-оос угсрах.
     */
    protected function buildPrompt(SurveyResponse $s): string
    {
        $responses = $s->raw_responses ?? [];

        $bizType = [
            'service' => 'үйлчилгээний', 'product' => 'барааны',
            'b2b' => 'B2B үйлчилгээний', 'mixed' => 'хосолсон',
        ][$responses['bizType'] ?? ''] ?? 'тодорхойгүй';

        $revenue = [
            'micro' => '₮5 саяа хүртэл', 'small' => '₮5-15 сая',
            'mid' => '₮15-50 сая', 'large' => '₮50 сая+',
        ][$responses['revenue'] ?? ''] ?? '—';

        $personaSummary = sprintf(
            '%s %s насны %s, сард %s төгрөг орлоготой',
            ['female' => 'эмэгтэй', 'male' => 'эрэгтэй', 'both' => 'эр/эм аль аль'][$responses['personaGender'] ?? ''] ?? 'хэрэглэгч',
            $responses['personaAge'] ?? '—',
            ($responses['personaWhy'] ?? '') ? "({$responses['personaWhy']})" : '',
            ['low' => '500К хүртэл', 'lower-mid' => '500К-1М', 'upper-mid' => '1М-3М', 'premium' => '3М+'][$responses['personaIncome'] ?? ''] ?? '—'
        );

        $painPoint = [
            'new-customers' => 'Шинэ хэрэглэгч олох нь хэцүү',
            'retention'     => 'Хуучин хэрэглэгчид буцаж ирэхгүй',
            'content'       => 'Сошиал пост үр дүн өгөхгүй',
            'ads'           => 'Зарын мөнгө үрэгддэг',
            'confused'      => 'Юу хийх ёстойг мэдэхгүй',
            'time'          => 'Founder цаг гарахгүй',
        ][$responses['painPoint'] ?? ''] ?? '—';

        $brandWords = is_array($responses['brandWords'] ?? null) ? implode(', ', $responses['brandWords']) : '—';

        return <<<PROMPT
Та бол NSMA-гийн AI маркетингийн зөвлөх. NSMA бол Монголын УУГАН маркетингийн зөвлөх компани (2009 онд байгуулагдсан, 17 жилийн туршлагатай, Coca-Cola, JTI, Unitel, Golomt Bank, MCS Group зэрэг 35+ том брэндтэй ажилласан).

Танай зорилго: Доорх ЖДБ founder-ийн судалгааны хариултанд тулгуурлан **монгол хэлээр** персонализ хийсэн маркетингийн оношлогооны тайланг үүсгэх.

# NSMA БРЭНДИЙН ДУУ ХООЛОЙН ДҮРЭМ
- Тоонд тулгуурласан, мэргэжлийн, "Монголын УУГАН" credibility-тэй
- "Магадгүй сайн ажиллана" гэх БИШ → "X-ийн дагуу Y нь Z" гэх СТИЛЬ
- "Та" хэрэглэх (албан, хагас-албан түвшний)
- Гадаад нэр томьёо хязгаартай: KPI, ROI, CAC, reach, CTR хадгалагдана
- Buzzword-оор дүүрэн БИШ — "synergy", "disruptive", "next-level" зэрэг хий үг ХОРИГЛОНО
- Founder-ийг "ойлгох" практик хэлээр (онол биш, үйлдэлд хөтлөх)

# СУДАЛГААНЫ ХАРИУЛТ

**Бизнес:**
- Нэр: {$responses['bizName']}
- Төрөл: $bizType
- Үндэслэгдсэн: {$responses['bizAge']}
- Сарын борлуулалт: $revenue
- Хэрэглэгчид ирдэг суваг: {$this->formatList($responses['channels'] ?? [])}
- Хамгийн том асуудал: **$painPoint**

**Хэрэглэгчийн дүр:**
$personaSummary
- Facebook/Instagram цаг: {$responses['personaTime']}
- Биднийг сонгох гол шалтгаан: {$responses['personaWhy']}

**Брэнд:**
- Тодорхойлох үгс: $brandWords
- Дуу хоолой: {$responses['brandVoice']}
- Үндсэн өнгө: {$responses['brandColor']}
- Хэрэглэгч найзтайгаа хэлэх өгүүлбэр: "{$responses['brandStatement']}"

**Капасит:**
- Founder цаг гарах: {$responses['hasTime']}
- Багны нөхцөл: {$responses['hasTeam']}
- Маркетингийн жилийн төсөв: {$responses['marketingBudget']}

# ҮҮСГЭХ ТАЙЛАН

Дараах JSON форматаар хариулна уу (markdown wrapping үгүй, цэвэр JSON):

```json
{
  "strategic_diagnosis": "2-3 параграфаар стратегийн оношлогоо — танай бизнесийн **одоогийн байр суурь**, **гол асуудал**, **дараа 90 хоногт юунд анхаарах** ёстойг бичих. Тооноор бичих хэсэг (жишээ нь '40-30-20-10 контентын пирамид баримтлавал...', '₮5-15 саяа борлуулалттай бизнес сард 500K-1М маркетингд...')",

  "customer_narrative": "1 параграфаар танай хэрэглэгчийг тодорхой хүн болгож зурах. Жишээ: 'Танай хэрэглэгч бол 35 настай эмэгтэй, ажилтай ээж, гэр бүлийн эрүүл хоолыг хайдаг. Тэр өглөө 7-9 цагт Facebook Stories шалгаж, үдээс хойш 17-19 цагт хайлт хийнэ. Бид түүний \"чанартай, гэртэй маягтай\" гэсэн хүлээлтэд хариулах ёстой.'",

  "action_plan_30day": [
    {"week": 1, "focus": "Хэсгийн фокус", "tasks": ["Action item 1", "Action item 2", "Action item 3"]},
    {"week": 2, "focus": "...", "tasks": ["...", "...", "..."]},
    {"week": 3, "focus": "...", "tasks": ["...", "...", "..."]},
    {"week": 4, "focus": "...", "tasks": ["...", "...", "..."]}
  ],

  "content_ideas": [
    {"type": "Үнэ цэнэт", "title": "Конкрет пост-ийн гарчиг танай бизнест зориулсан", "outline": "Пост-ийн агуулга 2-3 өгүүлбэрт"},
    {"type": "Итгэлцлийн", "title": "...", "outline": "..."},
    {"type": "Бүтээгдэхүүний", "title": "...", "outline": "..."},
    {"type": "Reels", "title": "...", "outline": "..."},
    {"type": "Stories", "title": "...", "outline": "..."}
  ],

  "brand_voice_sample": "3-4 өгүүлбэрийн Facebook пост, танай brand voice-аар бичигдсэн. Бизнесийн нэр + 3 түлхүүр үг + voice-ийн нөхцөлд тохирсон байх ёстой. Жишээний пост нь бодит хэрэглэхэд бэлэн байх (CTA-тай)."
}
```

ЗААВАЛ ҮЗЭХ: Хариултыг ЦЭВЭР JSON-аар л буцаа. Markdown wrap, тайлбар, өмнөтгөл огт битгий нэм.
PROMPT;
    }

    protected function formatList(array $items): string
    {
        $map = [
            'fb' => 'Facebook', 'referral' => 'Заагч найз', 'walk-in' => 'Дэлгүүрт орох',
            'outbound' => 'Бид өөрсдөө', 'google' => 'Google Maps/хайлт',
            'tv' => 'TV/радио', 'outdoor' => 'Самбар/флаер',
        ];
        if (empty($items)) return '—';
        return implode(', ', array_map(fn($i) => $map[$i] ?? $i, $items));
    }
}
