<?php

namespace App\Http\Controllers;

use App\Helpers\WebhookSignature;
use App\Models\WebhookStore;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Validator;
use Yajny\EventsYj\Events\WebhookNew;
use Yajny\Member\Models\WebhookHistory;

class WebhooksController extends Controller
{
    public function addSale(Request $request, $slug)
    {
        if ($request->has('categories')) {
            Validator::make($request->all(), [
                'store_id' => 'required',
                'categories' => 'required',
                'signature' => 'required',
            ])->validate();
        } else {
            Validator::make($request->all(), [
                'store_id' => 'required',
                'click_id' => 'required',
                'signature' => 'required',
                'order_id' => 'required',
                'order_amount' => 'required|numeric',
                'order_status' => 'required',
                'currency_code' => 'required|size:3'
            ])->validate();
        }
        $webhookStore = WebhookStore::where('store_id', $request->store_id)->first();
        if (is_null($webhookStore)) {
            Log::info('Webhook is not exist!', $request->all());
            return response()->json(['error' => 'Webhook is not exist!'], 404);
        }
        $webhookSignature = new WebhookSignature($request->all());
        if ($request->has('categories')) {
            if ($request->signature != $webhookSignature->generateCategoriesSignature($webhookStore->secret_key, json_encode($request->categories))) {
                Log::info('Signature is not matched!', $request->all());
                return response()->json(['error' => 'Signature is not matched!'], 400);
            }

        } else {
            if ($request->signature != $webhookSignature->generateSignature($webhookStore->secret_key)) {
                Log::info('Signature is not matched!', $request->all());
                return response()->json(['error' => 'Signature is not matched!'], 400);
            }
        }
        $webhookHistory = new WebhookHistory();
        $webhookHistory->slug = $slug;
        $webhookHistory->request_data = $request->all();
        $webhookHistory->referer_url = $request->server('HTTP_REFERER');
        $webhookHistory->save();
        event(new WebhookNew($webhookHistory));
        return [];

    }
}
