<?php

/*
 * Load Libraries
 */

class Mymoviepoll_REST extends WP_REST_Controller
{
    public function __construct()
    {
        add_action( 'rest_api_init', array($this,'update_poll_movies') );
        add_action( 'rest_api_init', array($this,'poll_vote') );
    }

    /*
     * https://[URL]/wp-json/mymoviepoll/v1/updatePoll
     */
    public function update_poll_movies()
    {
        register_rest_route( 'mymoviepoll/v1', '/updatePoll/', array(
            'methods' => 'POST',
            'callback' => array($this,'_update_poll'),
            'args' => [
                'post_id',
                'data'
            ]
        ) );
    }
    
    /*
     * https://[URL]/wp-json/mymoviepoll/v1/vote
     */
    public function poll_vote()
    {
        register_rest_route( 'mymoviepoll/v1', '/votePoll/', array(
            'methods' => 'POST',
            'callback' => array($this,'_vote_poll'),
            'args' => [
                'poll_id',
                'movie_id',
                'user_id',
                'payment_status',
                'data'
            ]
        ) );
    }

    /**
     * Update Poll
     *
     * @param string $post_id Post ID
     * @param boolean $data
     * @return array|null $reponse
     */
    public function _update_poll($request)
    {
        if($this->_basic_auth($request)) {
            $params = $request->get_params();
            $movies = $params['movies'];
            $post = $params['post'];

            update_post_meta($post, 'poll_movies', implode("|",$movies));

            return ['message' => 'poll updated'];
        } else {
            return new WP_REST_Response(['message' => 'Access Denied'], 401);
        }
    }

    /**
     * Vote Poll
     *
     * @param string $post_id Post ID
     * @param boolean $data
     * @return array|null $reponse
     */
    public function _vote_poll($request)
    {
        if($this->_basic_auth($request)) {
            $params = $request->get_params();
            $poll_id = $params['poll_id'];
            $user_id = $params['user_id'];
            $movie_id = $params['movie_id'];
            $payment_status = $params['user_id'];

            # Mark User
            update_user_meta($user_id, "poll_{$poll_id}_user_id_{$user_id}", $movie_id);
            # Update Move poll
            $post_votes = reset(get_post_meta($poll_id, "poll_{$poll_id}_movie_{$movie_id}"));
            update_post_meta($poll_id, "poll_{$poll_id}_movie_{$movie_id}", abs($post_votes)+1);

            return new WP_REST_Response(['message' => 'You have successfully voted.', 'post_votes' => $post_votes], 200);
        } else {
            return new WP_REST_Response(['message' => 'Access Denied'], 401);
        }
    }

    // Header Basic Auth
    private function _basic_auth($request) {
        // $headers = $request->get_headers();
        // $auth = reset($headers['authorization']);
        // $auth_array = explode(" ", $auth);
        // $username_password = explode(":", base64_decode($auth_array[1]));
        // $username = $username_password[0];
        // $password = $username_password[1];

        // $user = wp_authenticate( $username, $password );

        // if (!is_wp_error($user)) {
        //     return true;
        // } else {
        //     return false;
        // }
        return true;
    }
}

$mymovierestapi = new Mymoviepoll_REST();