<?php

namespace App\DynamoDB;

use Aws\DynamoDb\DynamoDbClient;
use Carbon\Carbon;
use Illuminate\Support\Facades\Auth;

class DynamoDB
{

    public static $service_status = true;
    public static $file = true;

    public static function log($log, $log_type, $mise = array()){
        static::dynamoDBConnect($log, $log_type, $mise);
    }

    private static function dynamoDBConnect($log = 'dynamodb-connected', $log_type = 'init', $mise = array())
    {
        if (!self::$service_status) {
            return;
        }

        if (self::$file)
            return; /*self::file($log, $log_type, $mise);*/

        $client = DynamoDbClient::factory(array(
            'credentials' => array(
                'key'    => _env('DYNAMO_KEY'),
                'secret' => _env('DYNAMO_SECRET'),
            ),
            'region' => _env('DYNAMO_REGION'),
            'version' => '2012-08-10'
        ));


        $client->putItem(array(
            'TableName' => 'logs',
            'Item' => array(
                'id' => array('S' => static::getID($log)),
                'time' => array('S' => (string)Carbon::now()->timestamp),
                'error' => array('S' => $log_type),
                'message' => array('S' => json_encode($log))
            )
        ));
    }

    private static function getID($log){
        return  (string)($log['id'] ?? (Auth::check() ? Auth::user()->id : csrf_token()));
    }

    private static function file($log, $log_type, $mise){
        $date = Carbon::now();

        $fileName = 'vendor_request_'.$date->toDateString().'.json';
        $file = fopen(storage_path($fileName), "a") or die("Unable to open file!");
        $log = (array)$log;
        $payload = $log['payload'] ?? $log;
        $preRes = $log['response'] ?? $log;
        fwrite($file, $date->toDateTimeString().' '.$log_type.' '.json_encode($mise).' '.json_encode($payload).' '.json_encode($preRes)."\n"."\n");
        fclose($file);
    }
}
