syntax = "proto3";

package memos.store;

option go_package = "gen/store";

enum WorkspaceSettingKey {
  WORKSPACE_SETTING_KEY_UNSPECIFIED = 0;
  // WORKSPACE_SETTING_BASIC is the key for basic settings.
  WORKSPACE_SETTING_BASIC = 1;
  // WORKSPACE_SETTING_GENERAL is the key for general settings.
  WORKSPACE_SETTING_GENERAL = 2;
  // WORKSPACE_SETTING_STORAGE is the key for storage settings.
  WORKSPACE_SETTING_STORAGE = 3;
  // WORKSPACE_SETTING_MEMO_RELATED is the key for memo related settings.
  WORKSPACE_SETTING_MEMO_RELATED = 4;
  // WORKSPACE_SETTING_TELEGRAM_INTEGRATION is the key for telegram integration settings.
  WORKSPACE_SETTING_TELEGRAM_INTEGRATION = 5;
}

message WorkspaceSetting {
  WorkspaceSettingKey key = 1;
  oneof value {
    WorkspaceBasicSetting basic_setting = 2;
    WorkspaceGeneralSetting general_setting = 3;
    WorkspaceStorageSetting storage_setting = 4;
    WorkspaceMemoRelatedSetting memo_related_setting = 5;
    WorkspaceTelegramIntegrationSetting telegram_integration_setting = 6;
  }
}

message WorkspaceBasicSetting {
  string server_id = 1;
  string secret_key = 2;
}

message WorkspaceGeneralSetting {
  // instance_url is the instance URL.
  string instance_url = 1;
  // disallow_signup is the flag to disallow signup.
  bool disallow_signup = 2;
  // disallow_password_login is the flag to disallow password login.
  bool disallow_password_login = 3;
  // additional_script is the additional script.
  string additional_script = 4;
  // additional_style is the additional style.
  string additional_style = 5;
  // custom_profile is the custom profile.
  WorkspaceCustomProfile custom_profile = 6;
}

message WorkspaceCustomProfile {
  string title = 1;
  string description = 2;
  string logo_url = 3;
  string locale = 4;
  string appearance = 5;
}

message WorkspaceStorageSetting {
  // storage_type is the storage type.
  StorageType storage_type = 1;
  // The id of actived external storage.
  optional int32 actived_external_storage_id = 2;
  // The local storage path for STORAGE_TYPE_LOCAL.
  // e.g. assets/{timestamp}_{filename}
  string local_storage_path = 3;
  // The max upload size in megabytes.
  int64 upload_size_limit_mb = 4;

  enum StorageType {
    STORAGE_TYPE_UNSPECIFIED = 0;
    // STORAGE_TYPE_DATABASE is the database storage type.
    STORAGE_TYPE_DATABASE = 1;
    // STORAGE_TYPE_LOCAL is the local storage type.
    STORAGE_TYPE_LOCAL = 2;
    // STORAGE_TYPE_EXTERNAL is the external storage type.
    STORAGE_TYPE_EXTERNAL = 3;
  }
}

message WorkspaceMemoRelatedSetting {
  // disallow_public_share disallows set memo as public visible.
  bool disallow_public_visible = 1;
  // display_with_update_time orders and displays memo with update time.
  bool display_with_update_time = 2;
}

message WorkspaceTelegramIntegrationSetting {
  // bot_token is the telegram bot token.
  string bot_token = 1;
}
