package me.smartproxy.tunnel.shadowsocks;

import java.net.InetSocketAddress;

import android.net.Uri;
import android.util.Base64;
import me.smartproxy.tunnel.Config;
 
public class ShadowsocksConfig extends Config {
	public String EncryptMethod;
	public String Password;
	
	public static ShadowsocksConfig parse(String proxyInfo) throws Exception{
		ShadowsocksConfig config=new ShadowsocksConfig();
	    Uri uri=Uri.parse(proxyInfo);
	    if(uri.getPort()==-1){
	    	String base64String=uri.getHost();
	    	proxyInfo="ss://"+ new String(Base64.decode(base64String.getBytes("ASCII"),Base64.DEFAULT));
	    	uri=Uri.parse(proxyInfo);
	    }
	    
	    String userInfoString=uri.getUserInfo();
	    if(userInfoString!=null){
	    	String[] userStrings=userInfoString.split(":");
	    	config.EncryptMethod=userStrings[0];
	    	if(userStrings.length>=2){
	    		config.Password=userStrings[1];
	    	}
	    }
	    config.ServerAddress=new InetSocketAddress(uri.getHost(), uri.getPort());
	    config.Encryptor=EncryptorFactory.createEncryptorByConfig(config);
	    return config;
	}
	
	@Override
	public boolean equals(Object o) {
		 if(o==null)
			 return false;
		 return this.toString().equals(o.toString());
	}
	
	@Override
	public String toString() {
		return String.format("ss://%s:%s@%s", EncryptMethod,Password,ServerAddress);
	}
}