<?php

namespace App\Controllers;

use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\API\ResponseTrait;
use CodeIgniter\HTTP\IncomingRequest;

class Myfituser extends BaseController
{
    use ResponseTrait;
    protected $request;

    public function __construct()
    {
        $this->request = \Config\Services::request(); // Services::request();
    }

    public function index()
    {
    }

    public function users()
    {
        //$request = service('request');
        header('Access-Control-Allow-Origin: *');
        //header("Access-Control-Allow-Origin: http://localhost:9057 ");
        header('Access-Control-Expose-Headers: Access-Control-Allow-Origin');
        //header('Access-Control-Allow-Credentials: true ');
        //header("Access-Control-Allow-Headers: Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With");
        header('Access-Control-Allow-Methods: POST, GET, PUT, DELETE, OPTIONS');
        header('Content-type: application/json');

        // what is the endpoint
        $uri = current_url(true);
        $pieces = explode('/', $uri);
        $psc = count($pieces);

        $endpoint = $psc > 0 ? $pieces[$psc - 1] : '';

        $endpoints = [
            'account' => ['POST'],
            'login' => ['POST'],
            'reminders' => ['GET'],
            'editreminder' => ['POST'],
            'myfeed' => ['GET'],
            'calendar' => ['GET'],
            'profile' => ['GET'],
            'loginhx' => ['GET'],
            'stats' => ['GET'],
            'remcategory' => ['GET'],
            'remmode' => ['GET'],
        ];

        // Retrieve an HTTP Request header, with case-insensitive names
        // $header_host = $this->request->getHeader('host');
        $content_type = $this->request->getHeader('Content-Type');
        // Retrieve JSON from AJAX calls
        $hhost = $this->request->getServer('Host');
        // Retrieve an HTTP Request header, with case-insensitive names
        //  $request->getHeader('host');
        //$au = $this->request->getHeader('Authorization');

        $res1 = [];
        if (array_key_exists($endpoint, $endpoints)) {
        } else {
            http_response_code(404);
            // tell the user product does not exist
            echo json_encode(['message' => 'Endpoint not found.']);
        }
        //  echo "EXYTACT INPUT DATA HERE";
        $raw_json = file_get_contents('php://input');
        $raw_array = json_decode($raw_json, true);
        //$raw_array['au'] =$au;
        // $raw_array['host'] = $header_host;

        $raw_array['getitem'] = $this->request->getJSON();
        $raw_array['content_type'] = $content_type;
        $raw_array['hhost'] = $hhost;

        if ($_SERVER['REQUEST_METHOD'] == 'GET') {
            $opts = [
                'http' => [
                    'method' => 'GET',
                ],
            ];

            $context = stream_context_create($opts);

            // Open the file using the HTTP headers set above
            $raw_json = file_get_contents('php://input', false, $context);
            $raw_array = json_decode($raw_json, true);
            // $raw_array = ['abcdef'];
        }

        // $raw_array = json_decode($this->request->getJSON(), true);

        switch ($endpoint) {
            case 'login':
                //$userAccess = new \App\Models\userAccess();
                //$res1 = $userAccess->startLogin($raw_array);
                break;
            case 'account':
                //    $res = $this->dummyData($raw_array);
                break;
            case 'reminders':
                $myfitUserReminders = new \App\Models\myfitUserReminders();
                $res1 = $myfitUserReminders->readReminders($raw_array);
                break;
            case 'remcategory':
                $myfitUserReminders = new \App\Models\myfitUserReminders();
                $res1 = $myfitUserReminders->reminderCategory();
                break;
            case 'remmode':
                $myfitUserReminders = new \App\Models\myfitUserReminders();
                $res1 = $myfitUserReminders->reminderMode();
                break;
            case 'editreminder':
                $myfitUserReminders = new \App\Models\myfitUserReminders();
                $res1 = $myfitUserReminders->reminderAddEdit($raw_array);
                break;
            case 'resources':
                $myfiResources = new \App\Models\myfiResources();
                $res1 = $myfiResources->getSiteResources($raw_array);
                break;
            case 'myfeed':
                $res1 = $this->dummyData($raw_array);
                break;
            case 'calendar':
                $res1 = $this->dummyData($raw_array);
                break;
            case 'profile':
                $res1 = $this->dummyData($raw_array);
                break;
            case 'stats':
                $res1 = $this->dummyData($raw_array);
                break;
            case 'loginhx':
                $myfitHx = new \App\Models\myfitHx();
                $res1 = $myfitHx->readLoginHx($raw_array);
                break;
        }

        return $this->response->setJson($res1);
    }

    //this is dummy function to establish the endpoints before real implementations
    private function dummyData($raw_array)
    {
        return [
            'msg' => 'Not implemented yet',
            'raw_data' => $raw_array,
        ];
    }
}
