function [url, user, pass] = user_url_pw_input_dialog
%user_url_pw_input
%   Return the URL, user name and password for the openBIS server

url = 'https://XYZ.ethz.ch/openbis:8443';
user = '';
pass = '';


ScreenSize = get(0,'ScreenSize');
fig = uifigure('Name', 'Enter openBIS credentials', 'Position',[(ScreenSize(3:4)-[300 75])/2 400 150]);
fig.CloseRequestFcn = @(fig,event)my_closereq(fig);

% URL label and text field
lbl_url = uilabel(fig, 'Text', 'URL:', ...
    'Position',[10 120 80 20]);

txt_url = uieditfield(fig,...
    'Position',[70 120 280 20], ...
    'Value', url, ...
    'Tag', 'url_textfield');

% User label and text field
lbl_user = uilabel(fig, 'Text', 'User:', ...
    'Position',[10 90 80 20]);

txt_user = uieditfield(fig,...
    'Position',[70 90 280 20], ...
    'Value', user, ...
    'Tag', 'user_textfield');

% Password label and text field
lbl_pass = uilabel(fig, 'Text', 'Password:', ...
    'Position',[10 60 80 20]);

txt_pass = uieditfield(fig,...
    'Position',[70 60 280 20], ...
    'Tag', 'pass_textfield', ...
    'ValueChangingFcn', @textChanging, ...
    'UserData', '');

% Push button to accept entries
btn = uibutton(fig,'push', ...
               'Position',[150 10 100 40], ...
               'Text', 'Connect', ...
               'FontWeight', 'bold', ...
               'ButtonPushedFcn', @(btn,event) buttonPushed(btn, fig));

uiwait(fig)
    
    % run this when figure closes
    function my_closereq(fig,selection)
        
        url = get(txt_url, 'Value');
        user = get(txt_user, 'Value');
        pass = get(txt_pass,'UserData');
        
        delete(fig)
        
    end

end

% Callback functions
function textChanging(txt, event)
% replace typed text with stars
% Todo: handle delete / backspace

% disp(event.Value);

if isempty(txt.UserData)
    txt.UserData = event.Value;
else
    txt.UserData = append(txt.UserData, event.Value(end));
end

val = event.Value;
if ~isempty(val)
    val(1:length(val)) = '*';
else
   val = '*'; 
end
txt.Value = val;

end

function buttonPushed(btn, fig)
% close the figure, call CloseRequestFcn before
        
        close(fig)
end