export const subscribeSchema = {
  SiteName: { type: "string", description: "Site name" },
  SubscribeName: { type: "string", description: "Subscribe name" },
  Proxies: {
    type: "array",
    description: "Array of proxy nodes",
    items: {
      type: "object",
      properties: {
        Name: { type: "string", description: "Node name" },
        Server: { type: "string", description: "Server host" },
        Port: { type: "number", description: "Server port" },
        Type: { type: "string", description: "Proxy type" },
        Tags: {
          type: "array",
          description: "Node tags",
          items: { type: "string" },
        },
        Sort: { type: "number", description: "Node sort order" },
        // Security Options
        Security: {
          type: "string",
          description: "Security protocol",
        },
        SNI: {
          type: "string",
          description: "Server Name Indication for TLS",
        },
        AllowInsecure: {
          type: "boolean",
          description:
            "Allow insecure connections (skip certificate verification)",
        },
        Fingerprint: {
          type: "string",
          description: "Client fingerprint for TLS connections",
        },
        RealityServerAddr: {
          type: "string",
          description: "Reality server address",
        },
        RealityServerPort: {
          type: "number",
          description: "Reality server port",
        },
        RealityPrivateKey: {
          type: "string",
          description: "Reality private key for authentication",
        },
        RealityPublicKey: {
          type: "string",
          description: "Reality public key for authentication",
        },
        RealityShortId: {
          type: "string",
          description: "Reality short ID for authentication",
        },
        // Transport Options
        Transport: {
          type: "string",
          description: "Transport protocol (e.g., ws, http, grpc)",
        },
        Host: {
          type: "string",
          description: "For WebSocket/HTTP/HTTPS",
        },
        Path: { type: "string", description: "For HTTP/HTTPS" },
        ServiceName: {
          type: "string",
          description: "For gRPC",
        },
        // Shadowsocks Options
        Method: { type: "string", description: "Encryption method" },
        ServerKey: {
          type: "string",
          description: "For Shadowsocks 2022",
        },
        // Vmess/Vless/Trojan Options
        Flow: {
          type: "string",
          description: "Flow for Vmess/Vless/Trojan",
        },
        // Hysteria2 Options
        HopPorts: {
          type: "string",
          description: "Comma-separated list of hop ports",
        },
        HopInterval: {
          type: "number",
          description: "Interval for hop ports in seconds",
        },
        ObfsPassword: {
          type: "string",
          description: "Obfuscation password for Hysteria2",
        },
        // Tuic Options
        DisableSNI: {
          type: "boolean",
          description: "Disable SNI",
        },
        ReduceRtt: {
          type: "boolean",
          description: "Reduce RTT",
        },
        UDPRelayMode: {
          type: "string",
          description: 'UDP relay mode (e.g., "full", "partial")',
        },
        CongestionController: {
          type: "string",
          description: 'Congestion controller (e.g., "cubic", "bbr")',
        },
        // Hysteria2 additional options
        UpMbps: {
          type: "number",
          description: "Upload bandwidth in Mbps",
        },
        DownMbps: {
          type: "number",
          description: "Download bandwidth in Mbps",
        },
        // VLESS encryption options
        Encryption: {
          type: "string",
          description: "Encryption type for VLESS",
        },
        EncryptionMode: {
          type: "string",
          description: 'Encryption mode (e.g., "native", "xorpub", "random")',
        },
        EncryptionRtt: {
          type: "string",
          description: 'Encryption RTT (e.g., "0rtt", "1rtt")',
        },
        EncryptionTicket: {
          type: "string",
          description: "Encryption ticket",
        },
        EncryptionServerPadding: {
          type: "string",
          description: "Server padding for encryption",
        },
        EncryptionClientPadding: {
          type: "string",
          description: "Client padding for encryption",
        },
        EncryptionPassword: {
          type: "string",
          description: "Encryption password",
        },
        EncryptionPrivateKey: {
          type: "string",
          description: "Private key for encryption",
        },
        // XHTTP options
        XhttpMode: {
          type: "string",
          description:
            'XHTTP mode (e.g., "auto", "packet-up", "stream-up", "stream-one")',
        },
        XhttpExtra: {
          type: "string",
          description: "XHTTP extra parameters",
        },
        // Shadowsocks obfs options (combined with Hysteria2 obfs)
        ObfsHost: {
          type: "string",
          description: "Obfuscation host",
        },
        ObfsPath: {
          type: "string",
          description: "Obfuscation path",
        },
        // Shadowsocks cipher
        Cipher: {
          type: "string",
          description: "Shadowsocks cipher method",
        },
        // AnyTLS options
        PaddingScheme: {
          type: "string",
          description: "Padding scheme for AnyTLS",
        },
        // Mieru options
        Multiplex: {
          type: "string",
          description:
            'Multiplex level (e.g., "none", "low", "middle", "high")',
        },
        // General protocol field
        Enable: {
          type: "boolean",
          description: "Whether this protocol is enabled",
        },
        // UUID for vmess/vless
        UUID: {
          type: "string",
          description: "User UUID for vmess/vless protocols",
        },
        // Alternative ID for vmess
        AlterId: {
          type: "number",
          description: "Alternative ID for vmess (deprecated)",
        },
        // Password for trojan/tuic
        Password: {
          type: "string",
          description: "Password for authentication",
        },
      },
    },
  },
  UserInfo: {
    type: "object",
    description: "User information",
    properties: {
      Password: { type: "string", description: "User password" },
      ExpiredAt: { type: "string", description: "Expiration date" },
      Download: { type: "number", description: "Downloaded bytes" },
      Upload: { type: "number", description: "Uploaded bytes" },
      Traffic: { type: "number", description: "Total traffic bytes" },
      SubscribeURL: {
        type: "string",
        description: "Subscription URL",
      },
    },
  },
};
