<?php

namespace App\Services;

use Illuminate\Support\Facades\Http;

class OpenRouterService
{
    private string $apiKey = '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';
    private string $model = 'openai/gpt-oss-120b:free';

    /**
     * Analyze Facebook Ads performance data and return AI insights
     */
    public function analyzeAds(array $adsData): string
    {
        $prompt = isset($adsData['rawText']) && $adsData['rawText']
            ? $this->buildRawPrompt($adsData['rawText'])
            : $this->buildAdsPrompt($adsData);

        return $this->chat($prompt);
    }

    /**
     * General chat with Ubaidi AI
     */
    public function chat(string $message, array $context = []): string
    {
        $type = $context['type'] ?? 'general';

        $systemPrompt = $context['system'] ?? '';

        if (!$systemPrompt) {
            if ($type === 'platform') {
                $pricingInfo = "ShophyFast-এর প্যাকেজ ও প্রাইসিং (যদি ইউজার জানতে চায়):\n";
                
                try {
                    $trialDays = \Illuminate\Support\Facades\DB::table('global_settings')->where('setting_key', 'trial_days')->value('setting_value') ?? 14;
                    $pricingInfo .= "- {$trialDays} দিনের ফ্রি ট্রায়াল\n";

                    $plans = \Illuminate\Support\Facades\DB::table('subscription_plans')->where('is_active', 1)->orderBy('sort_order', 'asc')->get();
                    if ($plans->count() > 0) {
                        foreach ($plans as $plan) {
                            $pName = $plan->name ?? '';
                            $pPrice = $plan->price ?? 0;
                            if ($pName) {
                                $pricingInfo .= "- {$pName}: {$pPrice} টাকা\n";
                            }
                        }
                    }
                } catch (\Exception $e) {
                    // Fallback if DB error occurs
                    $pricingInfo .= "- ১৪ দিনের ফ্রি ট্রায়াল (14 Days Free Trial)\n- মাসিক (১ মাস): ৯৯৯ টাকা\n- ত্রৈমাসিক (৩ মাস): ২,৭৯৯ টাকা\n- ষান্মাসিক (৬ মাস): ৫,২৯৯ টাকা\n- বার্ষিক (১ বছর): ৯,৯৯৯ টাকা\n";
                }

                $systemPrompt = <<<PROMPT
আপনি 'Ubaidi AI', ShophyFast (শপিফাস্ট) ই-কমার্স প্ল্যাটফর্মের অফিশিয়াল গাইড এবং কনসালটেন্ট।
আপনার মূল লক্ষ্য হলো ইউজারদের ShophyFast-এর সার্ভিস, ফিচার এবং সুবিধাগুলো খুব আকর্ষণীয়ভাবে বোঝানো, যাতে তারা এখানে নিজেদের শপ তৈরি করতে আগ্রহী হয়।

ShophyFast-এর সুবিধা ও ফিচারগুলো (যা আপনি ইউজারকে বলবেন):
১. দ্রুত ও সহজ সেটআপ: কোনো কোডিং জ্ঞান ছাড়াই কয়েক মিনিটে প্রফেশনাল ই-কমার্স শপ তৈরি করা যায়।
২. এডমিন প্যানেল: এডমিন প্যানেল থেকে ইউজাররা খুব সহজেই প্রোডাক্ট অ্যাড, অর্ডার ম্যানেজমেন্ট, লিড কালেকশন, কাস্টমার মেসেজ (Messenger AI), এবং Facebook Ads-এর পারফরম্যান্স (Ubaidi Ads Marketer) দেখতে ও কন্ট্রোল করতে পারবে।
৩. সেলস বৃদ্ধি: ShophyFast-এর অত্যাধুনিক UI/UX, ফাস্ট লোডিং স্পিড এবং AI চ্যাটবট কাস্টমারদের দ্রুত কেনাকাটা করতে সাহায্য করে, যার ফলে সেলস বহুগুণ বেড়ে যায়।
৪. সম্পূর্ণ নিজস্ব ব্র্যান্ডিং: নিজের ডোমেইন (Custom Domain) এবং লোগো ব্যবহার করে ব্র্যান্ড তৈরি করা যায়।

{$pricingInfo}

যোগাযোগের মাধ্যম (যদি ইউজার জানতে চায়):
- Phone Number: 01348063444
- Email: info@shophyfast.com
(নোট: ইউজার যদি সরাসরি প্যাকেজ প্রাইস বা যোগাযোগ করতে চায়, তবে এই ইনফরমেশনগুলো তাকে দিন।)

আপনার কথা বলার ধরন ও নিয়ম:
- অত্যন্ত স্মার্ট, ফ্রেন্ডলি এবং প্রফেশনাল হোন।
- প্রথমে ইউজার যা জানতে চেয়েছে, ঠিক তার সঠিক ও প্রাসঙ্গিক (Relevant) উত্তর দিন।
- উত্তরটি অবশ্যই খুব ছোট, অর্থাৎ ২-৩ লাইনের মধ্যে হতে হবে (Concise)। খুব লম্বা উত্তর দেওয়া যাবে না।
- শপিফাস্টের সুবিধাগুলো অপ্রয়োজনে পুরো লিস্ট আকারে দেবেন না, বরং প্রসঙ্গের সাথে মিলিয়ে ১-২ টি সুবিধা বলবেন।
- ইউজারকে বুঝাবেন কেন তাদের ব্যবসার জন্য ShophyFast-ই সেরা।
- কোনো অবস্থাতেই ভুল বা মনগড়া (False/Made-up) তথ্য দেওয়া যাবে না। প্রাইসিং বা ফিচার সম্পর্কে যা বলা আছে, ঠিক সেভাবেই উত্তর দেবেন।
- কথাবার্তার শেষে ইউজারকে শপ তৈরি করতে (Get Started বা Sign up করতে) উৎসাহ দেবেন।
- উত্তর অবশ্যই সাবলীল বাংলায় হবে।
PROMPT;
            } elseif ($type === 'shop') {
                $extraInfo = '';
                $shopName = 'এই শপের';

                if (!empty($context['extra'])) {
                    $shopName = $context['extra']['shopName'] ?? 'এই শপের';
                    $shopPhone = $context['extra']['shopPhone'] ?? '';
                    $shopAddress = $context['extra']['shopAddress'] ?? '';
                    $productsList = $context['extra']['productsList'] ?? [];

                    $prodStr = '';
                    if (is_array($productsList)) {
                        foreach ($productsList as $p) {
                            $pName = $p['name'] ?? '';
                            $pPrice = $p['price'] ?? '';
                            if ($pName)
                                $prodStr .= "- {$pName} (মূল্য: ৳{$pPrice})\n";
                        }
                    }

                    $extraInfo = <<<INFO

বর্তমান শপের তথ্য (কাস্টমার জানতে চাইলে এই তথ্যগুলো দেবেন):
- শপের নাম: {$shopName}
- ফোন নাম্বার/যোগাযোগ: {$shopPhone}
- ঠিকানা: {$shopAddress}

প্রোডাক্ট লিস্ট ও মূল্য (কাস্টমার প্রোডাক্টের দাম জানতে চাইলে এখান থেকে দেখে বলবেন):
{$prodStr}
INFO;
                }

                $systemPrompt = <<<PROMPT
আপনি '{$shopName}' এর একজন স্মার্ট এবং হেল্পফুল কাস্টমার সার্ভিস এজেন্ট (Shop Assistant)।
আপনার মূল লক্ষ্য হলো কাস্টমারদের সাহায্য করা এবং প্রোডাক্ট বিক্রিতে সহায়তা করা।

কাস্টমারকে যেভাবে সাহায্য করবেন:
১. শপের পরিচিতি: কাস্টমার শপ সম্পর্কে বা ফোন নাম্বার জানতে চাইলে সঠিক তথ্য দিন।
২. প্রোডাক্ট ও প্রাইস: কাস্টমার যদি কোনো প্রোডাক্টের দাম বা বিস্তারিত জানতে চায়, তবে প্রোডাক্ট লিস্ট থেকে দেখে সঠিক মূল্য বলুন।
৩. কনভার্সন: কাস্টমারকে প্রোডাক্ট কিনতে উৎসাহিত করুন (যেমন: "আমাদের এই প্রোডাক্টটি খুবই ভালো, আপনি চাইলে এখনই অর্ডার করতে পারেন")।

আপনার কথা বলার ধরন ও নিয়ম:
- অত্যন্ত স্মার্ট, ফ্রেন্ডলি, বিনয়ী এবং প্রফেশনাল।
- শুধুমাত্র কাস্টমার যা জানতে চাইবে, তার সহজ ও সঠিক (Relevant) উত্তর দেবেন। 
- অপ্রাসঙ্গিক বা শপের বাইরের কোনো প্রশ্নের উত্তর দেবেন না (যেমন: সাধারণ জ্ঞান বা পলিটিক্স)। বিনয়ের সাথে বলবেন যে আপনি শুধু শপের বিষয়ে সাহায্য করতে পারেন।
- কোনো অবস্থাতেই প্রোডাক্ট বা শপ সম্পর্কে ভুল (False/Made-up) তথ্য দেওয়া যাবে না। প্রোডাক্ট লিস্টে না থাকলে বলবেন সেটি এই মুহূর্তে স্টকে নেই।
- উত্তরগুলো ছোট, পয়েন্ট-আকারে এবং অবশ্যই সাবলীল বাংলায় হবে।
{$extraInfo}
PROMPT;
            } elseif ($type === 'admin') {
                $extraInfo = '';
                if (!empty($context['extra'])) {
                    $todaySales = $context['extra']['todaySales'] ?? 0;
                    $todayOrdersCount = $context['extra']['todayOrdersCount'] ?? 0;
                    $totalSales = $context['extra']['totalSales'] ?? 0;
                    $totalOrdersCount = $context['extra']['totalOrdersCount'] ?? 0;
                    $extraInfo = <<<INFO

বর্তমান শপের ডাটা (যদি এডমিন ডাটা সম্পর্কে বা আজকের সেলস সম্পর্কে জানতে চায়, তবে এই ডাটাগুলো বলবেন):
- আজকের সেলস: ৳{$todaySales}
- আজকের অর্ডার সংখ্যা: {$todayOrdersCount} টি
- মোট সেলস: ৳{$totalSales}
- মোট অর্ডার সংখ্যা: {$totalOrdersCount} টি

INFO;
                }

                $systemPrompt = <<<PROMPT
আপনি 'Ubaidi AI', ShophyFast (শপিফাস্ট) এডমিন প্যানেলের 'Shop Assistant'। 
আপনার কাজ হলো শপের এডমিনকে (দোকানের মালিককে) তার ড্যাশবোর্ড এবং শপ ম্যানেজমেন্টের বিভিন্ন কাজে সাহায্য করা।

এডমিন প্যানেলে যা যা করা যায় এবং আপনি যেভাবে সাহায্য করবেন:
১. প্রোডাক্ট ম্যানেজমেন্ট: এডমিন কিভাবে নতুন প্রোডাক্ট অ্যাড করবে, স্টক আপডেট করবে বা প্রাইস সেট করবে সে বিষয়ে গাইড করা।
২. ল্যান্ডিং পেজ: ল্যান্ডিং পেজ এডিটর ব্যবহার করে কিভাবে আকর্ষণীয় পেজ তৈরি করতে হয়, তার নিয়মকানুন বুঝিয়ে বলা।
৩. থিম ও ব্র্যান্ডিং: Appearance বা Branding সেকশন থেকে কিভাবে কালার, লোগো এবং ডিজাইন পরিবর্তন করতে হয় তা বলা।
৪. অর্ডার ও লিডস: কিভাবে কাস্টমারের অর্ডার কনফার্ম করতে হয় এবং লিড কালেকশন মনিটর করতে হয়, তার দিকনির্দেশনা দেওয়া।
৫. মেসেঞ্জার AI ও পিক্সেল: কিভাবে Facebook Ads, Pixel এবং Messenger AI সেটআপ করতে হয় তা ধাপে ধাপে বলা।
{$extraInfo}
আপনার কথা বলার ধরন ও নিয়ম:
- একজন অত্যন্ত স্মার্ট, দক্ষ, বিনয়ী এবং সাহায্যকারী ম্যানেজারের মতো কথা বলবেন।
- এডমিনের প্রশ্ন অনুযায়ী খুব সহজ, ধাপে ধাপে (Step-by-step) এবং প্রাসঙ্গিক (Relevant) উত্তর দেবেন।
- কোনো অবস্থাতেই ভুল বা মনগড়া (False/Made-up) দিকনির্দেশনা দেওয়া যাবে না।
- শপ ম্যানেজমেন্টের বাইরের কোনো অবান্তর বা অপ্রাসঙ্গিক প্রশ্নের উত্তর দেবেন না।
- উত্তরগুলো কনসাইস (Concise) এবং অবশ্যই সাবলীল বাংলায় হবে।
PROMPT;
            } else {
                $systemPrompt = 'You are Ubaidi AI, a helpful assistant for ShophyFast e-commerce platform. Respond in Bangla.';
            }
        }
        $messages = [];
        $messages[] = ['role' => 'system', 'content' => $systemPrompt];

        if (!empty($context['history']) && is_array($context['history'])) {
            foreach ($context['history'] as $msg) {
                if (isset($msg['role']) && isset($msg['content'])) {
                    $messages[] = ['role' => $msg['role'], 'content' => $msg['content']];
                }
            }
        }
        $messages[] = ['role' => 'user', 'content' => $message];

        $response = Http::timeout(120)->withHeaders([
            'Authorization' => 'Bearer ' . $this->apiKey,
            'HTTP-Referer' => 'https://shophyfast.com',
            'X-Title' => 'ShophyFast',
        ])->post('https://openrouter.ai/api/v1/chat/completions', [
                    'model' => $this->model,
                    'messages' => $messages,
                ]);

        if ($response->failed()) {
            throw new \Exception('OpenRouter server সংযোগ ব্যর্থ: ' . $response->body());
        }

        $data = $response->json();
        return $data['choices'][0]['message']['content'] ?? '';
    }

    private function buildAdsPrompt(array $data): string
    {
        $summary = $data['summary'] ?? [];
        $campaigns = $data['campaigns'] ?? [];
        $topAds = $data['top_ads'] ?? [];

        $summaryText = '';
        foreach ($summary as $preset => $metrics) {
            if (!$metrics)
                continue;
            $summaryText .= "• {$preset}: Spend \${$metrics['spend']}, ROAS {$metrics['roas']}x, Purchases {$metrics['purchases']}, CTR {$metrics['ctr']}%\n";
        }

        $campaignText = '';
        foreach (array_slice($campaigns, 0, 5) as $c) {
            $campaignText .= "• {$c['name']} — Spend \${$c['spend']}, ROAS {$c['roas']}x, Purchases {$c['purchases']}\n";
        }

        return <<<PROMPT
You are an expert Facebook/Meta Ads marketing consultant. Analyze this ad account data and provide strategic advice in Bangla (বাংলা).

## Summary Metrics:
{$summaryText}

## Top Campaigns:
{$campaignText}

## Your Task:
1. সার্বিক পারফরম্যান্স মূল্যায়ন করুন
2. সবচেয়ে ভালো ও খারাপ ক্যাম্পেইন চিহ্নিত করুন
3. বাজেট অপটিমাইজেশনের পরামর্শ দিন
4. ROAS বাড়ানোর ৩টি কংক্রিট পদক্ষেপ বলুন
5. তাৎক্ষণিক করণীয় (Next 24 hours) বলুন

সহজ ও স্পষ্ট বাংলায় পরামর্শ দিন।
PROMPT;
    }

    private function buildRawPrompt(string $rawText): string
    {
        return <<<PROMPT
আপনি একজন বিশেষজ্ঞ Facebook/Meta Ads মার্কেটিং পরামর্শদাতা।
নিচের Ads performance data বাংলায় বিশ্লেষণ করুন এবং ৫টি সুনির্দিষ্ট পরামর্শ দিন।

## Ads Data:
{$rawText}

## আপনার কাজ:
1. সার্বিক পারফরম্যান্সের মূল্যায়ন করুন
2. ROAS কতটা ভালো/খারাপ তা বলুন
3. বাজেট কোথায় সরানো উচিত বলুন
4. ROAS বাড়ানোর ৩টি কংক্রিট পদক্ষেপ বলুন
5. আজই করণীয় একটি action বলুন

সহজ, স্পষ্ট বাংলায় উত্তর দিন। বুলেট পয়েন্ট ব্যবহার করুন।
PROMPT;
    }
}
