import { XHTTP_MODES } from './constants';
import type { ProtocolType } from './types';

export function getProtocolDefaultConfig(proto: ProtocolType) {
  switch (proto) {
    case 'shadowsocks':
      return {
        type: 'shadowsocks',
        enable: false,
        port: null,
        cipher: 'chacha20-ietf-poly1305',
        server_key: null,
        obfs: 'none',
        obfs_host: null,
        obfs_path: null,
        sni: null,
        allow_insecure: null,
        cert_mode: 'none',
        cert_dns_provider: null,
        cert_dns_env: null,
        ratio: 1,
      } as any;
    case 'vmess':
      return {
        type: 'vmess',
        enable: false,
        host: null,
        port: null,
        transport: 'tcp',
        security: 'none',
        path: null,
        service_name: null,
        sni: null,
        allow_insecure: null,
        fingerprint: 'chrome',
        cert_mode: 'none',
        cert_dns_provider: null,
        cert_dns_env: null,
        ratio: 1,
      } as any;
    case 'vless':
      return {
        type: 'vless',
        enable: false,
        host: null,
        port: null,
        transport: 'tcp',
        security: 'none',
        flow: 'none',
        path: null,
        service_name: null,
        sni: null,
        allow_insecure: null,
        fingerprint: 'chrome',
        reality_server_addr: null,
        reality_server_port: null,
        reality_private_key: null,
        reality_public_key: null,
        reality_short_id: null,
        xhttp_mode: XHTTP_MODES[0], // 'auto'
        xhttp_extra: null,
        encryption: 'none',
        encryption_mode: null,
        encryption_rtt: null,
        encryption_ticket: null,
        encryption_server_padding: null,
        encryption_private_key: null,
        encryption_client_padding: null,
        encryption_password: null,
        cert_mode: 'none',
        cert_dns_provider: null,
        cert_dns_env: null,
        ratio: 1,
      } as any;
    case 'trojan':
      return {
        type: 'trojan',
        enable: false,
        host: null,
        port: null,
        transport: 'tcp',
        security: 'tls',
        path: null,
        service_name: null,
        sni: null,
        allow_insecure: null,
        fingerprint: 'chrome',
        cert_mode: 'none',
        cert_dns_provider: null,
        cert_dns_env: null,
        ratio: 1,
      } as any;
    case 'hysteria':
      return {
        type: 'hysteria',
        enable: false,
        port: null,
        hop_ports: null,
        hop_interval: null,
        obfs: 'none',
        obfs_password: null,
        security: 'tls',
        up_mbps: null,
        down_mbps: null,
        sni: null,
        allow_insecure: null,
        fingerprint: 'chrome',
        cert_mode: 'none',
        cert_dns_provider: null,
        cert_dns_env: null,
        ratio: 1,
      } as any;
    case 'tuic':
      return {
        type: 'tuic',
        enable: false,
        port: null,
        disable_sni: false,
        reduce_rtt: false,
        udp_relay_mode: 'native',
        congestion_controller: 'bbr',
        security: 'tls',
        sni: null,
        allow_insecure: false,
        fingerprint: 'chrome',
        cert_mode: 'none',
        cert_dns_provider: null,
        cert_dns_env: null,
        ratio: 1,
      } as any;
    case 'socks':
      return {
        type: 'socks',
        enable: false,
        port: null,
        ratio: 1,
      } as any;
    case 'naive':
      return {
        type: 'naive',
        enable: false,
        port: null,
        security: 'none',
        sni: null,
        allow_insecure: null,
        fingerprint: 'chrome',
        cert_mode: 'none',
        cert_dns_provider: null,
        cert_dns_env: null,
        ratio: 1,
      } as any;
    case 'http':
      return {
        type: 'http',
        enable: false,
        port: null,
        security: 'none',
        sni: null,
        allow_insecure: null,
        fingerprint: 'chrome',
        cert_mode: 'none',
        cert_dns_provider: null,
        cert_dns_env: null,
        ratio: 1,
      } as any;
    case 'mieru':
      return {
        type: 'mieru',
        enable: false,
        port: null,
        multiplex: 'none',
        transport: 'tcp',
      } as any;
    case 'anytls':
      return {
        type: 'anytls',
        enable: false,
        port: null,
        security: 'tls',
        padding_scheme: null,
        sni: null,
        allow_insecure: false,
        fingerprint: 'chrome',
        cert_mode: 'none',
        cert_dns_provider: null,
        cert_dns_env: null,
        ratio: 1,
      } as any;
    default:
      return {} as any;
  }
}
