/**
 * @file tokenization.config.example.ts
 * @notice Example tokenization configuration file
 * @description Copy this file to tokenization.config.ts and fill in your values
 */

export const tokenizationConfig = {
    // Fabric Configuration
    fabric: {
        networkName: process.env.FABRIC_NETWORK || 'fabric-network',
        channelName: process.env.FABRIC_CHANNEL || 'mychannel',
        chaincodeIds: {
            tokenizedAsset: process.env.FABRIC_CHAINCODE_TOKENIZED_ASSET || 'tokenized-asset',
            reserveManager: process.env.FABRIC_CHAINCODE_RESERVE_MANAGER || 'reserve-manager'
        },
        peerAddress: process.env.FABRIC_PEER_ADDRESS || 'peer0.org1.example.com:7051',
        ordererAddress: process.env.FABRIC_ORDERER_ADDRESS || 'orderer.example.com:7050'
    },

    // Besu Configuration (Chain 138)
    besu: {
        rpcUrl: process.env.CHAIN_138_RPC_URL || 'http://localhost:8545',
        wsUrl: process.env.CHAIN_138_WS_URL || 'ws://localhost:8546',
        chainId: 138,
        tokenizedEURAddress: process.env.TOKENIZED_EUR_ADDRESS || '',
        tokenRegistryAddress: process.env.TOKEN_REGISTRY_ADDRESS || '',
        deployerPrivateKey: process.env.DEPLOYER_PRIVATE_KEY || '',
        adminAddress: process.env.ADMIN_ADDRESS || ''
    },

    // FireFly Configuration
    firefly: {
        apiUrl: process.env.FIREFLY_API_URL || 'http://localhost:5000',
        apiKey: process.env.FIREFLY_API_KEY || '',
        namespace: process.env.FIREFLY_NAMESPACE || 'default'
    },

    // Cacti Configuration
    cacti: {
        apiUrl: process.env.CACTI_API_URL || 'http://localhost:4000',
        fabricConnectorId: process.env.CACTI_FABRIC_CONNECTOR_ID || 'fabric-connector-1',
        besuConnectorId: process.env.CACTI_BESU_CONNECTOR_ID || 'besu-connector-1',
        fabricNetworkId: process.env.CACTI_FABRIC_NETWORK_ID || 'fabric-tokenization',
        besuNetworkId: process.env.CACTI_BESU_NETWORK_ID || 'besu-tokenization'
    },

    // SolaceNet Configuration
    solacenet: {
        apiUrl: process.env.SOLACENET_API_URL || 'http://localhost:3000',
        apiKey: process.env.SOLACENET_API_KEY || '',
        capabilities: {
            mint: 'tokenization.mint',
            transfer: 'tokenization.transfer',
            redeem: 'tokenization.redeem',
            view: 'tokenization.view'
        }
    },

    // Indy Configuration
    indy: {
        apiUrl: process.env.INDY_API_URL || 'http://localhost:9000',
        poolName: process.env.INDY_POOL_NAME || 'dbis-pool',
        walletName: process.env.INDY_WALLET_NAME || 'tokenization-wallet',
        walletKey: process.env.INDY_WALLET_KEY || ''
    },

    // HSM Configuration
    hsm: {
        enabled: process.env.HSM_ENABLED === 'true',
        endpoint: process.env.HSM_ENDPOINT || 'http://localhost:8080',
        apiKey: process.env.HSM_API_KEY || '',
        keyId: process.env.HSM_KEY_ID || '',
        minterKeyId: process.env.HSM_MINTER_KEY_ID || '',
        attestorKeyIds: process.env.HSM_ATTESTOR_KEY_IDS?.split(',') || []
    },

    // Banking Integration
    banking: {
        swift: {
            enabled: process.env.SWIFT_ENABLED === 'true',
            apiUrl: process.env.SWIFT_API_URL || '',
            apiKey: process.env.SWIFT_API_KEY || '',
            bic: process.env.SWIFT_BIC || ''
        },
        target2: {
            enabled: process.env.TARGET2_ENABLED === 'true',
            apiUrl: process.env.TARGET2_API_URL || '',
            apiKey: process.env.TARGET2_API_KEY || ''
        }
    },

    // Reserve Configuration
    reserve: {
        quorumThreshold: parseInt(process.env.RESERVE_QUORUM_THRESHOLD || '2'), // Minimum attestors
        attestationValidityHours: parseInt(process.env.RESERVE_ATTESTATION_VALIDITY_HOURS || '24'),
        minBackingRatio: parseFloat(process.env.RESERVE_MIN_BACKING_RATIO || '1.0')
    },

    // Sub-Volume Integration
    subVolumes: {
        gas: {
            enabled: process.env.GAS_ENABLED !== 'false',
            apiUrl: process.env.GAS_API_URL || 'http://localhost:3001'
        },
        gru: {
            enabled: process.env.GRU_ENABLED !== 'false',
            apiUrl: process.env.GRU_API_URL || 'http://localhost:3002'
        },
        metaverse: {
            enabled: process.env.METAVERSE_ENABLED !== 'false',
            apiUrl: process.env.METAVERSE_API_URL || 'http://localhost:3003'
        }
    },

    // Microservices Integration
    microservices: {
        isoCurrency: {
            apiUrl: process.env.ISO_CURRENCY_API_URL || 'http://localhost:4001'
        },
        liquidityEngine: {
            apiUrl: process.env.LIQUIDITY_ENGINE_API_URL || 'http://localhost:4002'
        },
        marketReporting: {
            apiUrl: process.env.MARKET_REPORTING_API_URL || 'http://localhost:4003'
        },
        bridgeReserve: {
            apiUrl: process.env.BRIDGE_RESERVE_API_URL || 'http://localhost:4004'
        }
    },

    // Observability Configuration
    observability: {
        prometheusEnabled: process.env.PROMETHEUS_ENABLED === 'true',
        prometheusPort: parseInt(process.env.PROMETHEUS_PORT || '9090'),
        logLevel: process.env.LOG_LEVEL || 'info',
        maxLogs: parseInt(process.env.MAX_LOGS || '10000'),
        metricsEnabled: process.env.METRICS_ENABLED !== 'false'
    },

    // Tokenization Workflow Configuration
    workflow: {
        defaultTimeout: parseInt(process.env.WORKFLOW_TIMEOUT || '3600'), // 1 hour
        maxRetries: parseInt(process.env.WORKFLOW_MAX_RETRIES || '3'),
        retryDelay: parseInt(process.env.WORKFLOW_RETRY_DELAY || '5000') // 5 seconds
    }
};
