syntax = "proto3";

package devvit.plugin.redditapi.wiki;

import "devvit/plugin/redditapi/common/common_msg.proto";
import "devvit/plugin/redditapi/wiki/wiki_msg.proto";
import "google/protobuf/empty.proto";

option go_package = "github.snooguts.net/reddit/reddit-devplatform-monorepo/go-common/generated/protos/types/devvit/plugin/redditapi";
option java_package = "com.reddit.devvit.plugin.redditapi.wiki";

// WIKI - https://www.reddit.com/dev/api#section_wiki
service Wiki {
  // Get a list of wiki pages for a subreddit
  //
  // @see {@link https://www.reddit.com/dev/api#GET_wiki_pages}
  rpc GetWikiPages(GetWikiPagesRequest) returns (GetWikiPagesResponse) {
    option (devvit.plugin.redditapi.common.api_client_config).method = 'GET';
    option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/wiki/pages';
  }
  // Get a wiki page
  //
  // @see {@link https://www.reddit.com/dev/api#GET_wiki_\{page\}}
  rpc GetWikiPage(GetWikiPageRequest) returns (GetWikiPageResponse) {
    option (devvit.plugin.redditapi.common.api_client_config).method = 'GET';
    option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/wiki/{page}?v={revision_id}';
    option (devvit.plugin.redditapi.common.api_client_config).use_custom_response_parser = true;
  }
  // Edit wiki page
  //
  // @see {@link https://www.reddit.com/dev/api#POST_api_wiki_edit}
  rpc EditWikiPage(EditWikiPageRequest) returns (google.protobuf.Empty) {
    option (devvit.plugin.redditapi.common.api_client_config).method = 'POST';
    option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/api/wiki/edit';
    option (devvit.plugin.redditapi.common.api_client_config).request_body_type = FORM_SNAKE;
  }
  // Hide a wiki page revision
  //
  // @see {@link https://www.reddit.com/dev/api#POST_api_wiki_hide}
  rpc HideWikiPageRevision(HideWikiPageRevisionRequest) returns (HideWikiPageRevisionResponse) {
    option (devvit.plugin.redditapi.common.api_client_config).method = 'POST';
    option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/api/wiki/hide';
    option (devvit.plugin.redditapi.common.api_client_config).request_body_type = FORM_SNAKE;
  }
  // Get a list of revisions of a wiki page
  //
  // @see {@link https://www.reddit.com/dev/api#GET_wiki_revisions_\{page\}}
  rpc GetWikiPageRevisions(GetWikiPageRevisionsRequest) returns (WikiPageRevisionListing) {
    option (devvit.plugin.redditapi.common.api_client_config).method = 'GET';
    option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/wiki/revisions/{page}?after={after}&before={before}&count={count}&limit={limit}&show={show}&sr_detail={sr_detail}';
  }
  // Retrieve a list of recently changed wiki pages in this subreddit
  //
  // @see {@link https://www.reddit.com/dev/api#GET_wiki_revisions}
  rpc GetWikiRevisions(GetWikiRevisionsRequest) returns (WikiPageRevisionListing) {
    option (devvit.plugin.redditapi.common.api_client_config).method = 'GET';
    option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/wiki/revisions?after={after}&before={before}&count={count}&limit={limit}&show={show}&sr_detail={sr_detail}';
  }
  // Revert a wiki page to revision
  //
  // @see {@link https://www.reddit.com/dev/api#POST_api_wiki_revert}
  rpc RevertWikiPage(RevertWikiPageRequest) returns (google.protobuf.Empty) {
    option (devvit.plugin.redditapi.common.api_client_config).method = 'POST';
    option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/api/wiki/revert';
    option (devvit.plugin.redditapi.common.api_client_config).request_body_type = FORM_SNAKE;
  }
  // Retrieve the current permission settings for page
  //
  // @see {@link https://www.reddit.com/dev/api#GET_wiki_settings_\{page\}}
  rpc GetWikiPageSettings(GetWikiPageSettingsRequest) returns (WikiPageSettings) {
    option (devvit.plugin.redditapi.common.api_client_config).method = 'GET';
    option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/wiki/settings/{page}';
  }
  // Update the permissions and visibility of wiki page
  //
  // @see {@link https://www.reddit.com/dev/api#POST_wiki_settings_\{page\}}
  rpc UpdateWikiPageSettings(UpdateWikiPageSettingsRequest) returns (WikiPageSettings) {
    option (devvit.plugin.redditapi.common.api_client_config).method = 'POST';
    option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/wiki/settings/{page}';
    option (devvit.plugin.redditapi.common.api_client_config).request_body_type = FORM_CAMEL;
  }
  // Allow/deny username to edit this wiki page
  // Note act must be either "add" or "del"
  //
  // @see {@link https://www.reddit.com/dev/api#POST_api_wiki_alloweditor_\{act\}}
  rpc AllowEditor(AllowEditorRequest) returns (google.protobuf.Empty) {
    option (devvit.plugin.redditapi.common.api_client_config).method = 'POST';
    option (devvit.plugin.redditapi.common.api_client_config).path = '/r/{subreddit}/api/wiki/alloweditor/{act}';
    option (devvit.plugin.redditapi.common.api_client_config).request_body_type = FORM_SNAKE;
  }
}
