// eslint-disable-next-line import/no-unresolved
import { webSockets } from '@libp2p/websockets';
import * as filters from '@libp2p/websockets/filters';
import { Options } from 'ipfs-core/dist/src/types';

const configIpfs = (): Options => ({
  start: true,
  repo: 'ipfs-repo-cyber-v2',
  relay: {
    enabled: false,
    hop: {
      enabled: false,
    },
  },
  preload: {
    enabled: false,
  },
  config: {
    API: {
      HTTPHeaders: {
        'Access-Control-Allow-Methods': ['PUT', 'POST'],
        'Access-Control-Allow-Origin': [
          'http://localhost:3000',
          'http://127.0.0.1:5001',
          'http://127.0.0.1:8888',
          'http://localhost:8888',
        ],
      },
    },
    Addresses: {
      Gateway: '/ip4/127.0.0.1/tcp/8080',
      Swarm: [
        // '/dns4/ws-star.discovery.cybernode.ai/tcp/443/wss/p2p-webrtc-star',
        // '/dns4/wrtc-star1.par.dwebops.pub/tcp/443/wss/p2p-webrtc-star',
        // '/dns4/wrtc-star2.sjc.dwebops.pub/tcp/443/wss/p2p-webrtc-star',
      ],
      Delegates: [
        // '/dns4/node0.delegate.ipfs.io/tcp/443/https',
        // '/dns4/node1.delegate.ipfs.io/tcp/443/https',
        // '/dns4/node2.delegate.ipfs.io/tcp/443/https',
      ],
    },
    Discovery: {
      MDNS: {
        Enabled: true,
        Interval: 10,
      },
      webRTCStar: {
        Enabled: false,
      },
    },
    Bootstrap: [
      // '/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN',
      // '/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb',
      // '/dnsaddr/bootstrap.libp2p.io/p2p/QmZa1sAxajnQjVM8WjWXoMbmPd7NsWhfKsPkErzpm9wGkp',
      // '/dnsaddr/bootstrap.libp2p.io/p2p/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa',
      // '/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt',
      // '/dns4/ws-star.discovery.cybernode.ai/tcp/4430/wss/p2p/QmUgmRxoLtGERot7Y6G7UyF6fwvnusQZfGR15PuE6pY3aB',
    ],
    Pubsub: {
      Enabled: false,
    },
    Swarm: {
      ConnMgr: {
        HighWater: 300,
        LowWater: 50,
      },
      DisableNatPortMap: false,
    },
    Routing: {
      Type: 'dhtclient',
    },
  },
  libp2p: {
    transports: [
      // This is added for local demo!
      // In a production environment the default filter should be used
      // where only DNS + WSS addresses will be dialed by websockets in the browser.
      webSockets({
        filter: filters.dnsWss,
      }),
    ],
    nat: {
      enabled: false,
    },
  },
  EXPERIMENTAL: {
    ipnsPubsub: false,
  },
});

export default configIpfs;

Neighbours