<?php

namespace App\Http\Controllers\API;

use App\Http\Controllers\Controller;
use App\Models\Mapping;
use App\Models\MiddlewareContent;
use App\Models\PlatformMapping;
use Illuminate\Http\Request;

class HomeAPIController extends Controller
{
    public function handlePayload($request, $type = null)
    {
        $payload = $request;

        if (count($payload) == 0 || empty($payload)) {
            return ['status' => false];
            exit;
        }

        $selectedPlatforms = array_keys(array_filter($payload['platform'], function ($value) {
            return $value == 1;
        }));

        $mappings = Mapping::join('platform_mappings', 'platform_mappings.mapping_id', '=', 'mappings.id')
            ->whereIn('platform_mappings.platform', $selectedPlatforms)
            ->where('step', 1)
            ->where('mappings.type', $type)
            ->groupBy('platform_mappings.mapping_id')
            ->get();

        foreach ($mappings as $mapping) {

            $response = [];
            $mapping_steps = PlatformMapping::where(['mapping_id' => $mapping->mapping_id, 'platform' => $mapping->platform])
                ->orderBy('step')->get();

            foreach ($mapping_steps as $step) {
                // step body
                $step_response = [
                    'url' => env(strtoupper($step->platform) . '_URL') . str_replace(["\r", "\n"], '', trim($step->url)),
                    'method' => $step->method,
                    'platform' => $step->platform,
                    'body' => [],
                ];

                // Decode the JSON payload
                $jsonToArray = json_decode($step->json_payload, true);

                // Add helper params
                $step_response['step'] = $step->step;
                $step_response['repetitive'] = $step->repetitive;
                $step_response['dependent'] = $step->dependent;
                $step_response['foodics_mapping_param'] = $step->foodics_mapping_param;
                $step_response['foodics_swap_params'] = $step->foodics_swap_params;
                $step_response['dependent_params'] = str_replace(["\r", "\n"], '', trim($step->dependent_params));

                // Fill in the response body based on the JSON mapping
                if ($step->repetitive) {
                    $payloadkey = $step->repetitive_params;

                    if (isset($payload[$payloadkey])) {
                        $jsonToArrayKeys = array_keys($jsonToArray);

                        $step_response['body'] = array_map(function ($repetitive_item) use ($jsonToArray, $jsonToArrayKeys) {
                            $arr = [];

                            foreach ($jsonToArrayKeys as $key) {
                                $arr[$key] = $repetitive_item[$jsonToArray[$key]] ?? null;
                            }

                            return $arr;
                        }, $payload[$payloadkey]);
                    }
                } else {
                    if (is_array($jsonToArray)) {
                        $step_response['body'] = array_map(function ($item) use ($payload) {
                            return $payload[$item] ?? null;
                        }, $jsonToArray);
                    } else {
                        // Handle the case where $jsonToArray is null or not an array
                        $step_response['body'] = [];
                    }
                }

                // Pass to Integration Controller
                $step_response['brand_id'] = $payload['brand_id'];
                $step_response['company_id'] = $payload['company_id'];
                $step_response['access_token'] = $payload['access_token'];
                $response[] = $step_response;
            }
            //dd($response);

            return json_encode($response);
            // $controller = new IntegrationAPIController();
            // $controller->index($response);
        }
    }

    public function storePayloadRequest(Request $request)
    {
        $input = $request->all();

        if (!empty($input)) {
            MiddlewareContent::create($input);
        }

        return json_encode(['status' => true]);
    }

    public function storeBulkRequest(Request $request)
    {
        $request->validate([
            'file' => 'required|file|mimes:json', // JSON file validation rule
        ]);

        $file = $request->file('file');

        // Check if the file exists
        if ($file) {

            // Read the JSON content from the uploaded file
            $jsonContent = file_get_contents($file->getPathname());

            // Parse the JSON data into an array
            $jsonData = json_decode($jsonContent, true);

            if ($jsonData === null) {
                // JSON parsing failed
                return response()->json(['error' => 'Invalid JSON file'], 400);
            }

            // Now $jsonData contains the data from the uploaded JSON file
            MiddlewareContent::insert($jsonData);
            //dd($jsonData);
            return response()->json(['data' => true]);
        } else {
            // File not found
            return response()->json(['error' => 'File not found'], 404);
        }
    }
    public function deleteBulkRequest($brand_id)
    {
        if (isset($brand_id)&&$brand_id!=null) {
            MiddlewareContent::where(['brand_id'=>$brand_id,'status'=>1])->update([
                'status'=>99
            ]);
        }

        return json_encode(['status' => true]);
    }
}
