<?php 
 
namespace App\Controller; 
 
use App\Entity\Vehicle; 
use App\Entity\VehiclePositions; 
use App\Service\ElasticService; 
use Doctrine\ORM\EntityManagerInterface; 
use Psr\Log\LoggerInterface; 
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\Response; 
 
class CronJobController extends AbstractController 
{ 
    public function postPositions(EntityManagerInterface $em, Request $request, LoggerInterface $logger) 
    { 
        try { 
            $data1 = $request->request->get('data'); 
            $data = json_decode($data1, true); 
            $vehicle = $em->getRepository(Vehicle::class)->findOneBy(['trackerId' => $data['imei']]); 
            $positions = new VehiclePositions(); 
            $positions->setVehicle($vehicle) 
                ->setLongitude($data['lng']) 
                ->setLatitude($data['lat']) 
                ->setPositionTime(new \DateTime()) 
                ->setVehicleSpeed($data['speed']) 
                ->setDistanceCovered(0.0); 
            $em->persist($positions); 
            $em->flush(); 
            $logger->error(__METHOD__ . ' -> {message}', ['message' => $data]); 
            return new Response('Ok', 200); 
        } catch (\Exception $e) { 
            $logger->error(__METHOD__ . ' -> {message}', ['message' => $e->getMessage()]); 
        } 
    } 
 
    public function postPositionsLocal(EntityManagerInterface $em, Request $request, LoggerInterface $logger) 
    { 
        $data1='{"op":"loc","imei":"358480080044318","dt_tracker":"2019-12-17 17:12:37","lat":38.007147,"lng":23.845655,"altitude":229,"angle":60,"speed":0,"loc_valid":1,"params":{"gpslev":7,"batc":0,"gsmlev":3,"gnss":1,"ext_volt":12.78,"speed":0,"batv":4.071},"event":null}'; 
 
 
//        dump(json_decode($data,true)); 
 
 
//        $data1=$request->request->get('data'); 
        $data=json_decode($data1,true); 
 
        $vehicle=$em->getRepository(Vehicle::class)->findOneBy(['trackerId' => $data['imei']]); 
 
        $positions=new VehiclePositions(); 
 
        $positions->setVehicle($vehicle); 
        $positions->setLongitude($data['lng']); 
        $positions->setLatitude($data['lat']); 
        $positions->setPositionTime(new \DateTime()); 
        $positions->setVehicleSpeed($data['speed']); 
        $positions->setDistanceCovered(0.0); 
        $em->persist($positions); 
        $em->flush(); 
 
        return new Response('Ok',200); 
    } 
 
    public function purgeVehiclePositions(ElasticService $elasticService, LoggerInterface $logger): Response 
    { 
        $size = 10000; 
 
        try { 
            $date = new \DateTime(); 
            $date->sub(new \DateInterval('P90D')); 
 
            $response = $elasticService->deleteOldValues($date, $size); 
 
            if ($response) { 
                return new Response('Ok',200); 
            } 
 
            return new Response('Internal Server Error',500); 
        } catch (\Exception $e) { 
            $logger->error(__METHOD__ . ' -> {message}', ['message' => $e->getMessage()]); 
 
            return new Response('Internal Server Error',500); 
        } 
    } 
}