syntax = "proto3";

package memos.store;

import "google/protobuf/timestamp.proto";
import "store/instance_setting.proto";

option go_package = "gen/store";

enum AttachmentStorageType {
  ATTACHMENT_STORAGE_TYPE_UNSPECIFIED = 0;
  // Attachment is stored locally. AKA, local file system.
  LOCAL = 1;
  // Attachment is stored in S3.
  S3 = 2;
  // Attachment is stored in an external storage. The reference is a URL.
  EXTERNAL = 3;
}

enum MotionMediaFamily {
  MOTION_MEDIA_FAMILY_UNSPECIFIED = 0;
  APPLE_LIVE_PHOTO = 1;
  ANDROID_MOTION_PHOTO = 2;
}

enum MotionMediaRole {
  MOTION_MEDIA_ROLE_UNSPECIFIED = 0;
  STILL = 1;
  VIDEO = 2;
  CONTAINER = 3;
}

message MotionMedia {
  MotionMediaFamily family = 1;
  MotionMediaRole role = 2;
  string group_id = 3;
  int64 presentation_timestamp_us = 4;
  bool has_embedded_video = 5;
}

message AttachmentPayload {
  oneof payload {
    S3Object s3_object = 1;
  }

  MotionMedia motion_media = 10;

  message S3Object {
    StorageS3Config s3_config = 1;
    // key is the S3 object key.
    string key = 2;
    // last_presigned_time is the last time the object was presigned.
    // This is used to determine if the presigned URL is still valid.
    google.protobuf.Timestamp last_presigned_time = 3;
  }
}
