/home/awneajlw/.trash/app.2/Http/Controllers/SubAdmin/SaleController.php
<?php

namespace App\Http\Controllers\SubAdmin;

use Carbon\Carbon;
use App\Models\Sale;
use App\Models\User;
use App\Models\SaleItem;
use App\Models\Inventory;
use Illuminate\Http\Request;
use Barryvdh\DomPDF\Facade\Pdf;
use App\Http\Controllers\Controller;
use App\Models\UserDetail;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
use Endroid\QrCode\Builder\Builder;
use Endroid\QrCode\Encoding\Encoding;
use Endroid\QrCode\ErrorCorrectionLevel;
use Endroid\QrCode\RoundBlockSizeMode;
use Endroid\QrCode\Writer\PngWriter;

class SaleController extends Controller
{
    public function index()
    {
        $user = Auth::user();
        $inventories = Inventory::where('branch_id', $user->branch_id)->get();
        return view('admin.subAdmin.index', compact('inventories', 'user'));
    }


    public function store(Request $request)
    {
        $request->validate([
            'buyer_name' => 'required|string|max:255',
            'inventory_ids' => 'required|array',
            'quantities' => 'required|array',
            'prices' => 'required|array',
        ]);

        $user = Auth::user();
        $vatdetail = UserDetail::where('branch_id', Auth::user()->branch_id)->first();

        if (!$vatdetail) {
            return back()->with('error', 'VAT details not found for this branch');
        }

        $original_total_price = 0;
        $total_vat = 0;

        foreach ($request->quantities as $index => $quantity) {
            $price = $request->prices[$index];
            $subtotal = $quantity * $price;
            $vat = $subtotal * 0.15;

            $original_total_price += $subtotal;
            $total_vat += $vat;
        }

        $total_price_with_vat = $original_total_price + $total_vat;

        $vat_no_final = $request->vat_no ?? $vatdetail->vat_no;

        try {
            // Generate KSA e-invoice QR code data
            $sellerName = $vatdetail->brand_name;
            $vatNumber = $vat_no_final;
            $timestamp = now()->format('Y-m-d\TH:i:s\Z');
            $invoiceTotal = number_format($total_price_with_vat, 2, '.', '');
            $vatTotal = number_format($total_vat, 2, '.', '');

            // Create TLV format for KSA e-invoice QR code
            $tlvData = $this->generateTLV([
                1 => $sellerName,
                2 => $vatNumber,
                3 => $timestamp,
                4 => $invoiceTotal,
                5 => $vatTotal
            ]);

            // Generate QR code using Builder
            $result = Builder::create()
                ->data($tlvData)
                ->encoding(new Encoding('UTF-8'))
                ->errorCorrectionLevel(ErrorCorrectionLevel::High)
                ->size(300)
                ->margin(10)
                ->roundBlockSizeMode(RoundBlockSizeMode::Margin)
                ->writer(new PngWriter())
                ->build();

            // Generate unique filename
            $qrFileName = 'ksa_qr_' . time() . '.png';
            $qrPath = 'qr_codes/' . $qrFileName;

            // Ensure directory exists
            if (!file_exists(public_path('qr_codes'))) {
                mkdir(public_path('qr_codes'), 0777, true);
            }

            // Save QR code image
            $result->saveToFile(public_path($qrPath));

            // Create sale record with QR code path
            $saleId = Sale::insertGetId([
                'vat_no' => $vat_no_final,
                'buyer_name' => $request->buyer_name,
                'branch_id' => $user->branch_id,
                'price' => $original_total_price,
                'total_price' => $total_price_with_vat,
                'direction' => $request->direction,
                'language' => $request->language,
                'qr_ksa' => $qrPath,
                'created_at' => now(),
            ]);

            foreach ($request->inventory_ids as $index => $inventory_id) {
                $quantity_sold = $request->quantities[$index];
                $price = $request->prices[$index];
                $subtotal = $quantity_sold * $price;
                $vat = $subtotal * 0.15;

                SaleItem::insertGetId([
                    'sale_id' => $saleId,
                    'inventory_id' => $inventory_id,
                    'quantity_sold' => $quantity_sold,
                    'price' => $price,
                    'vat' => $vat,
                    'created_at' => now(),
                ]);

                // Update inventory
                $inventory = Inventory::find($inventory_id);
                $inventory->quantity -= $quantity_sold;
                $inventory->save();
            }

            return redirect()->route('invoice.show', $saleId);

        } catch (\Exception $e) {
            dd($e);
        }
    }

    /**
     * Generate TLV (Tag-Length-Value) format for KSA e-invoice QR code
     */
    private function generateTLV(array $data): string
    {
        try {
            $result = '';
            foreach ($data as $tag => $value) {
                $valueBytes = mb_convert_encoding($value, 'UTF-8');
                $length = strlen($valueBytes);
                $result .= pack('C', $tag) . pack('C', $length) . $valueBytes;
            }
            return base64_encode($result);
        } catch (\Exception $e) {
            dd($e);

        }
    }

    public function show($id)
    {

        $userDetail = UserDetail::where('branch_id', Auth::user()->branch_id)->first();

        $sale = Sale::with('saleItems.inventory', 'branch', 'user')->findOrFail($id);


        // dd($sale->user->name);

        return view('admin.subAdmin.show', compact('sale', 'userDetail'));

        // $pdf = Pdf::setOption(['isHtmlParserEnabled' => true,'isRemoteEnabled'=>true,'defaultFont' => 'sans-serif'])->loadView('admin.subAdmin.show', compact('sale'))->setPaper('A4', 'landscape');

        // return $pdf->stream("pdfcard.pdf");

        // return view('admin.subAdmin.show', compact('sale'));
    }
}