<?php
namespace Activitypub\Model;

use WP_Query;
use Activitypub\Signature;
use Activitypub\Collection\Users;

use function Activitypub\get_rest_url_by_path;

class Application_User extends Blog_User {
	/**
	 * The User-ID
	 *
	 * @var int
	 */
	protected $_id = Users::APPLICATION_USER_ID; // phpcs:ignore PSR2.Classes.PropertyDeclaration.Underscore

	/**
	 * The User-Type
	 *
	 * @var string
	 */
	protected $type = 'Application';

	/**
	 * Get the User-Url.
	 *
	 * @return string The User-Url.
	 */
	public function get_url() {
		return get_rest_url_by_path( 'application' );
	}

	public function get_name() {
		return 'application';
	}

	public function get_username() {
		return $this::get_name();
	}

	public function get__public_key() {
		$key = \get_option( 'activitypub_application_user_public_key' );

		if ( $key ) {
			return $key;
		}

		$this->generate_key_pair();

		$key = \get_option( 'activitypub_application_user_public_key' );

		return $key;
	}

	/**
	 * @param int $user_id
	 *
	 * @return mixed
	 */
	public function get__private_key() {
		$key = \get_option( 'activitypub_application_user_private_key' );

		if ( $key ) {
			return $key;
		}

		$this->generate_key_pair();

		return \get_option( 'activitypub_application_user_private_key' );
	}

	private function generate_key_pair() {
		$key_pair = Signature::generate_key_pair();

		if ( ! is_wp_error( $key_pair ) ) {
			\update_option( 'activitypub_application_user_public_key', $key_pair['public_key'] );
			\update_option( 'activitypub_application_user_private_key', $key_pair['private_key'] );
		}
	}

	public function get_inbox() {
		return null;
	}

	public function get_outbox() {
		return null;
	}

	public function get_followers() {
		return null;
	}

	public function get_following() {
		return null;
	}

	public function get_attachment() {
		return array();
	}
}