syntax = "proto3";

package analytics.v1;

option go_package = "github.com/gosms-ge/go2-sdk/go/analytics/v1;analyticsv1";

// AnalyticsService handles link analytics
service AnalyticsService {
  // Get overview statistics for a link
  rpc GetStats(GetStatsRequest) returns (GetStatsResponse);

  // Get click data over time
  rpc GetTimeseries(GetTimeseriesRequest) returns (GetTimeseriesResponse);

  // Get breakdown by platform
  rpc GetPlatforms(GetPlatformsRequest) returns (GetPlatformsResponse);

  // Get breakdown by country
  rpc GetCountries(GetCountriesRequest) returns (GetCountriesResponse);

  // Get top referrers
  rpc GetReferrers(GetReferrersRequest) returns (GetReferrersResponse);
}

// Get stats
message GetStatsRequest {
  string link_id = 1;
  string period = 2; // 7d, 30d, 90d
}

message GetStatsResponse {
  int64 total_clicks = 1;
  int64 unique_clicks = 2;
  int64 ios_clicks = 3;
  int64 android_clicks = 4;
  int64 web_clicks = 5;
  int64 other_clicks = 6;
  repeated CountryStats top_countries = 7;
  repeated ReferrerStats top_referrers = 8;
}

// Get timeseries
message GetTimeseriesRequest {
  string link_id = 1;
  string period = 2; // 7d, 30d, 90d
}

message GetTimeseriesResponse {
  repeated TimeseriesPoint points = 1;
}

message TimeseriesPoint {
  string date = 1;
  int64 clicks = 2;
  int64 unique_clicks = 3;
}

// Get platforms
message GetPlatformsRequest {
  string link_id = 1;
  string period = 2; // 7d, 30d, 90d
}

message GetPlatformsResponse {
  repeated PlatformStats platforms = 1;
}

message PlatformStats {
  string platform = 1;
  int64 clicks = 2;
  double percentage = 3;
}

// Get countries
message GetCountriesRequest {
  string link_id = 1;
  string period = 2; // 7d, 30d, 90d
  int32 limit = 3;   // Max number of results
}

message GetCountriesResponse {
  repeated CountryStats countries = 1;
}

message CountryStats {
  string country_code = 1;
  string country_name = 2;
  int64 clicks = 3;
  double percentage = 4;
}

// Get referrers
message GetReferrersRequest {
  string link_id = 1;
  string period = 2; // 7d, 30d, 90d
  int32 limit = 3;   // Max number of results
}

message GetReferrersResponse {
  repeated ReferrerStats referrers = 1;
}

message ReferrerStats {
  string referrer = 1;
  int64 clicks = 2;
  double percentage = 3;
}
