/*
 *
 *   Licensed to the Apache Software Foundation (ASF) under one or more
 *   contributor license agreements.  See the NOTICE file distributed with
 *   this work for additional information regarding copyright ownership.
 *   The ASF licenses this file to You under the Apache License, Version 2.0
 *   (the "License"); you may not use this file except in compliance with
 *   the License.  You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 *
 */

package org.apache.dubbo.samples.basic;

import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.ReferenceConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.SslConfig;
import org.apache.dubbo.config.bootstrap.DubboBootstrap;
import org.apache.dubbo.samples.basic.api.DemoService;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SslBasicConsumer {

    private static final String ROOT_DIR = System.getProperty("user.dir");

    public static void main(String[] args) {
        SslConfig sslConfig = new SslConfig();
        if (args.length > 0) {
            if (args.length != 1 && args.length != 3) {
                System.out.println(
                        "USAGE: BasicConsumer [trustCertCollectionFilePath [certChainFilePath privateKeyFilePath]]\n " +
                                "Specify 'certChainFilePath' and 'privateKeyFilePath' only if you need Mutual TLS.");
                System.exit(0);
            }

            switch (args.length) {
                case 1:
                    sslConfig.setClientTrustCertCollectionPath(args[0]);
                    break;
                case 3:
                    sslConfig.setClientTrustCertCollectionPath(args[0]);
                    sslConfig.setClientKeyCertChainPath(args[1]);
                    sslConfig.setClientPrivateKeyPath(args[2]);
            }
        }

        DubboBootstrap bootstrap = DubboBootstrap.getInstance()
                .application(new ApplicationConfig("first-dubbo-consumer"))
                .registry(new RegistryConfig("zookeeper://127.0.0.1:2181"))
                .ssl(sslConfig);

        ReferenceConfig<DemoService> reference = new ReferenceConfig<>();
        reference.setInterface(DemoService.class);

        bootstrap.reference(reference);

        bootstrap.start();

        DemoService service = bootstrap.getCache().get(reference);
        String message = service.sayHello("dubbo");
        System.out.println(message);
    }
}