<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\WhatsappStoreCredits;
use App\Models\WhatsappConfig;
use App\Models\WhatsappCredits;
use App\Models\WhatsappTemplates;
use App\Models\WhatsappLogs;
use App\Models\Setting;
use App\Models\User;
use App\Services\SendWhatsAppService;
use Carbon\Carbon;
use Illuminate\Support\Facades\Auth;

class WhatsappController extends Controller
{
    public function WhatsappConfigure(){
        $config = WhatsappConfig::find(1);
        return view('admin.whatsapp.whatsappconfig', compact('config'));
    }

    public function WhatsappCredits(){
        $credits = WhatsappCredits::orderBy('whatsapp_date', 'desc')->paginate(15);
        $store_credits = WhatsappStoreCredits::firstOrNew(['id' => 1]);
        return view('admin.whatsapp.whatsappcredits', compact('credits'),compact('store_credits'));
    }

    public function WhatsappCreditsCreate(){
        return view('admin.whatsapp.whatsappcredits_create');
    }

    public function Whatsapptemplates(){
        $templateData = WhatsappTemplates::all()->keyBy('identifier');
        $posOwnerCopyEnabled = Setting::get('whatsapp_pos_owner_copy_enabled', '0') === '1';
        return view('admin.whatsapp.whatsapp-templates', compact('templateData', 'posOwnerCopyEnabled'));
    }

    public function WhatsappLogs(Request $request)
    {
        $query = WhatsappLogs::query();

        $date = $request->range;

        if (!empty($date)) {
            $date_parts = explode(' to ', $date);

            if (count($date_parts) === 2) {
                $start_date = date('Y-m-d', strtotime(trim($date_parts[0]))) . ' 00:00:00';
                $end_date = date('Y-m-d', strtotime(trim($date_parts[1]))) . ' 23:59:59';

                $query->where('created_at', '>=', $start_date)
                    ->where('created_at', '<=', $end_date);
            }
        }

        $summaryRows = (clone $query)
            ->selectRaw('identifier, COUNT(*) as total_messages, SUM(CASE WHEN status = 1 THEN 1 ELSE 0 END) as sent_messages, SUM(CASE WHEN status = 1 THEN 0 ELSE 1 END) as failed_messages')
            ->groupBy('identifier')
            ->orderByRaw('COUNT(*) DESC')
            ->get();

        $utilizationByTemplate = $summaryRows->map(function ($row) {
            $identifier = (string) $row->identifier;
            $sentMessages = (int) $row->sent_messages;
            $creditPerMessage = SendWhatsAppService::creditsForTemplate($identifier);

            return (object) [
                'identifier' => $identifier,
                'category' => SendWhatsAppService::templateCategory($identifier),
                'total_messages' => (int) $row->total_messages,
                'sent_messages' => $sentMessages,
                'failed_messages' => (int) $row->failed_messages,
                'credits_per_message' => $creditPerMessage,
                'credits_used' => $sentMessages * $creditPerMessage,
            ];
        });

        $utilizationSummary = [
            'total_messages' => (int) $utilizationByTemplate->sum('total_messages'),
            'sent_messages' => (int) $utilizationByTemplate->sum('sent_messages'),
            'failed_messages' => (int) $utilizationByTemplate->sum('failed_messages'),
            'credits_used' => (int) $utilizationByTemplate->sum('credits_used'),
            'utility_credits_used' => (int) $utilizationByTemplate->where('category', 'utility')->sum('credits_used'),
            'marketing_credits_used' => (int) $utilizationByTemplate->where('category', 'marketing')->sum('credits_used'),
        ];

        $logs = $query->orderBy('id', 'desc')->paginate(15);

        return view('admin.whatsapp.whatsapplogs', compact('logs', 'date', 'utilizationByTemplate', 'utilizationSummary'));
    }

    public function WhatsappLogsdetail($id){
       
       $log = WhatsappLogs::findOrFail($id); 
        $customer_name = User::findOrFail($log->customer_id)->name; 
        return view('admin.whatsapp.logs-detail',compact('log'),compact('customer_name'));
    }

   public function updatewhatsappconfig(Request $request) {
        $validatedData = $request->validate([
            'api_access_token' => 'required|string|max:255',
            'api_url' => 'required|url|max:255',
            'vendor_uid' => 'required|string|max:255',
            'phone_id' => 'required|string|max:255',
            'is_active' => 'required|in:Yes,No',
        ]);

        // Get the config with ID 1 or create a new one
        $config = WhatsappConfig::firstOrNew(['id' => 1]);
        $config->user_id = Auth::id();
        $config->api_access_token = $validatedData['api_access_token'];
        $config->base_url = $validatedData['api_url'];
        $config->your_vendorid = $validatedData['vendor_uid'];
        $config->phone_number_id = $validatedData['phone_id'];
        $config->is_active = $validatedData['is_active'] === 'Yes' ? 1 : 0;

        $config->save();
        // flash('WhatsApp configuration saved successfully!')->success();
        return redirect()->back()->with('success', 'WhatsApp configuration saved successfully!');
    }

   public function createwhatsappcredits(Request $request)
    {
        $validatedData = $request->validate([
            'date' => 'required|date',
            'whatsapp_credits' => 'required|integer',
        ]);

        // Save data to the model
        $credits = new WhatsappCredits();
        $credits->whatsapp_date = $validatedData['date'];
        $credits->whatsapp_credit = $validatedData['whatsapp_credits'];
        if($credits->save()){
            $store_credits = WhatsappStoreCredits::firstOrNew(['id' => 1]);
            $store_credits->total_credits = $store_credits->total_credits + $credits->whatsapp_credit;
            $store_credits->save();

            // flash('WhatsApp Credits saved successfully!')->success();
            return redirect()->route('admin.whatsapp.credits')->with('success', 'WhatsApp Credits saved successfully!');
        }

        // flash('WhatsApp Credits not saved')->error();
        return redirect()->back()->with('error', 'WhatsApp Credits not saved');
    }

    public function updateWhatsapptemplates(Request $request)
    {
        // Get all identifiers of templates
        $allTemplates = WhatsappTemplates::all();

        // Get the identifiers that are marked active (i.e., were checked in the form)
        $activeIdentifiers = $request->input('is_active', []); // default to empty array

        // Loop through all templates and update is_active field
        foreach ($allTemplates as $template) {
            $template->is_active = in_array($template->identifier, $activeIdentifiers) ? 1 : 0;
            $template->save();
        }

        // Separate toggle: send POS invoice copy to site owner for wholesale customers.
        Setting::set('whatsapp_pos_owner_copy_enabled', $request->has('whatsapp_pos_owner_copy_enabled') ? '1' : '0');

        // flash('WhatsApp templates updated successfully!')->success();
        return redirect()->back()->with('success', 'WhatsApp templates updated successfully!');
    }  

}