function varargout = GUI_Datendownload(varargin)


% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @GUI_Datendownload_OpeningFcn, ...
                   'gui_OutputFcn',  @GUI_Datendownload_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before GUI_Datendownload is made visible.
function GUI_Datendownload_OpeningFcn(hObject, eventdata, handles, varargin)

% Choose default command line output for GUI_Datendownload
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% TEXT annotations need an axes as parent so create an invisible axes which
% is as big as the figure
handles.laxis = axes('parent',hObject,'units','normalized','position',[0 0 1 1],'visible','off');
% Find all static text UICONTROLS whose 'Tag' starts with latex_
lbls = findobj(hObject,'-regexp','tag','latex_*');
for i=1:length(lbls)
    l = lbls(i);
    % Get current text, position and tag
    set(l,'units','normalized');
    s = get(l,'string');
    p = get(l,'position');
    t = get(l,'tag');
    % Remove the UICONTROL
    delete(l);
    % Replace it with a TEXT object
    handles.(t) = text(p(1),p(2),texlabel(s));%,'interpreter','latex');
end

% Update handles structure
guidata(hObject, handles);

% set(handles.latex_einheit_a,'String',strcat('m/s',^,{'2'})); 



    

function varargout = GUI_Datendownload_OutputFcn(hObject, eventdata, handles) 

% Get default command line output from handles structure
varargout{1} = handles.output;



function Eingabe_User_Id_Callback(hObject, eventdata, handles)
function Eingabe_User_Id_CreateFcn(hObject, eventdata, handles)



function pushbutton_Download_Callback(hObject, eventdata, handles)

LogIn_List = get(handles.User_LogIn,'String');
LogIn = LogIn_List(get(handles.User_LogIn,'Value'));

if isempty(LogIn_List) || strcmp(LogIn,'Serverdaten')
    h = msgbox('Bitte wählen Sie einen oder mehrere User für den Daten-Download', 'Error');
end


short_months = [4,6,9,11];

for i=1:length(LogIn)

    start_day   = get(handles.start_date_day,'Value');
    start_month = get(handles.start_date_month,'Value');
    start_year  = get(handles.start_date_year,'Value');

    switch start_year
        case 1
            start_year = 10;
        case 2
            start_year = 11;
        case 3
            start_year = 12;
        case 4
            start_year = 13;
    end

    end_day     = get(handles.end_date_day,'Value');
    end_month   = get(handles.end_date_month,'Value');
    end_year    = get(handles.end_date_year, 'Value');
  

    switch end_year
        case 1
            end_year = 10;
        case 2
            end_year = 11;
        case 3
            end_year = 12;
        case 4
            end_year = 13;
    end
    
% Überprüfung ob gültiges Datum
    if not(isempty(short_months==start_month))
        if start_day == 31
            h = msgbox('kein gültiges Start-Datum', 'Error');
            break
        elseif start_month == 2 && start_day > 28
            h = msgbox('kein gültiges Start-Datum', 'Error');
            break
        end
    end
    
    
    if not(isempty(short_months==end_month))
        if end_day == 31 
            h = msgbox('kein gültiges End-Datum', 'Error');
            break
        elseif end_month == 2 && end_day > 28
            h = msgbox('kein gültiges End-Datum', 'Error');
            break
        end
    end
    
    
    %     Verschiebung Enddatum um einen Tag für SQL-Abfrage
    if end_day < 27
        end_day = end_day + 1;
    elseif end_month == 2 && end_day == 28
        end_month = 3;
        end_day   = 1;
    elseif not(isempty(short_months==end_month)) 
        if end_day < 30
            end_day = end_day + 1;
        else
            end_month = end_month + 1;
            end_day = 1;
        end
    elseif isempty(short_months==end_month)
        if end_day < 31
            end_day = end_day + 1;
        else 
            end_day = 1;
            end_month = end_month + 1;
        end
        
    end
    
    Start_neu = strcat(num2str(start_day),'.',num2str(start_month),'.',num2str(start_year));
    Ende_neu  = strcat(num2str(end_day),'.',num2str(end_month),'.',num2str(end_year));

%     folder_name = Datendownload (LogIn{i,1}, Start_neu, Ende_neu);
    
    split_expr = '@';
    splitStr = regexp(LogIn{i,1},split_expr,'split');

    handles.folder_name = folder_name;
    handles.User_name   = splitStr{1};
    handles.name_suffix = strcat('@',splitStr{2});
    guidata(hObject,handles);
    
end



function User_LogIn_Callback(hObject, eventdata, handles)
function User_LogIn_CreateFcn(hObject, eventdata, handles)


function pushbutton_Usernamen_Callback(hObject, eventdata, handles)

set(gcf,'Pointer','watch')
drawnow;

% Überprüfen des Offline-Modus
connection = check_connection();
if ( connection == 0 )
    handles.offline = 1;
else
    handles.offline = 0;
end
% Sperren des pushbutton_usernamen im Offline-Modus
if ( handles.offline == 1 )
    msgbox( 'Es besteht keine Verbindung zum Server! Überprüfen Sie die VPN-Verbindung', 'Warnung: Offline-Modus', 'warn' );
    return
end

userstruct = getUserNames_new();                        % Struct von Server holen mit Usernamen (LOGIN) und UserIDs (USER_ID)
    Anzahl_userstruct = size(userstruct);                               % Checken wie viele User es gibt
    for n= 1:Anzahl_userstruct(2)                                       % Alle User durchlaufen und in Array speichern
        if n == 1
            userlist = cellstr(char(userstruct(n).LOGIN));            % Erstes Element separat für Initialisierung von userlist
        else
            userlist = [userlist cellstr(char(userstruct(n).LOGIN))];
        end
    end
    handles.userlist = userlist;            % Variable in handles anlegen damit auf die Daten der User durch andere Funktionen zugegriffen werden kann
    guidata(hObject, handles);              % Variable in handles korrekt abspeichern
    handles.userstruct = userstruct;        % s.o.
    guidata(hObject, handles);
    
    handles = guidata(hObject);
    % Initialisieren der Listbox mit den Serverdatensätzen
    set(handles.User_LogIn, 'String', handles.userlist);
    % Initialisieren von Filter4 (Callback von Filter3 initialisiert Liste von Filter4)
%     popupmenu_Filter3_Callback(handles.popupmenu_Filter3, eventdata, handles);

set(gcf,'Pointer','arrow')


function start_date_day_Callback(hObject, eventdata, handles)
function start_date_day_CreateFcn(hObject, eventdata, handles)
set(hObject,'Value',1)
handles.start_date_day = 1;

guidata(hObject,handles);


function start_date_month_Callback(hObject, eventdata, handles)
function start_date_month_CreateFcn(hObject, eventdata, handles)
set(hObject,'Value',1)
handles.start_date_month = 1;

guidata(hObject,handles);


function start_date_year_Callback(hObject, eventdata, handles)
function start_date_year_CreateFcn(hObject, eventdata, handles)
set(hObject,'Value',1)
handles.start_date_year = 2010;

guidata(hObject,handles);


function end_date_day_Callback(hObject, eventdata, handles)
function end_date_day_CreateFcn(hObject, eventdata, handles)
set(hObject,'Value',1)
handles.end_date_day = 1;

guidata(hObject,handles)


function end_date_month_Callback(hObject, ~, handles)
function end_date_month_CreateFcn(hObject, eventdata, handles)
set(hObject,'Value',1)
handles.end_date_month = 1;

guidata(hObject,handles)


function end_date_year_Callback(hObject, eventdata, handles)
function end_date_year_CreateFcn(hObject, eventdata, handles)
set(hObject,'Value',1)
handles.end_date_year = 1;

guidata(hObject,handles)



function Laenge_Mikrotrips_Callback(hObject, eventdata, handles)
function Laenge_Mikrotrips_CreateFcn(hObject, eventdata, handles)
set(hObject,'Value',120)
handles.Laenge_Mikrotrips = 120;

guidata(hObject,handles)




function Toleranz_Mikrotrips_Callback(hObject, eventdata, handles)
function Toleranz_Mikrotrips_CreateFcn(hObject, eventdata, handles)
set(hObject,'Value',30)
handles.Toleranz_Mikrotrips = 30;

guidata(hObject,handles)


function Treshold_Speed_Callback(hObject, eventdata, handles)
function Treshold_Speed_CreateFcn(hObject, eventdata, handles)
set(hObject,'Value',3)
handles.Treshold_Speed = 3;

guidata(hObject,handles)



function Treshold_Acceleration_Callback(hObject, eventdata, handles)
function Treshold_Acceleration_CreateFcn(hObject, eventdata, handles)
set(hObject,'Value',0.02)
handles.Treshold_Acceleration = 0.02;

guidata(hObject,handles)




function pushbutton_create_mikrotrips_Callback(hObject, eventdata, handles)

length_mikrotrip = str2double(get(handles.Laenge_Mikrotrips,'String'));
tolerance        = str2double(get(handles.Toleranz_Mikrotrips,'String'));
treshold_speed   = str2double(get(handles.Treshold_Speed,'String'));
treshold_acc     = str2double(get(handles.Treshold_Acceleration,'String'));
treshold_parking = str2double(get(handles.treshold_parking,'String'));

if ~isfield(handles,'folder_name')
    dir_name = uigetdir;
    
    split_expr = '@';
    splitStr = regexp(dir_name,split_expr,'split');
    split_folder_name = regexp(splitStr(1),'\','split');
    User_name = split_folder_name{1}(end);
    handles.User_name = User_name{1};
    folder = [];
    for i=1:length(split_folder_name{1}(1:end-1))
        folder = strcat(folder,'/',split_folder_name{1}(i));
    end
    handles.folder_name = folder{1}(2:end);
    handles.name_suffix = strcat('@',splitStr{2});
end

User_name = split_Tracks_at_time_intervall_2(handles.folder_name, handles.User_name, handles.name_suffix,...
    length_mikrotrip, tolerance, treshold_speed, treshold_acc, treshold_parking);


handles.User_name = User_name{1};
guidata(hObject,handles)


function treshold_parking_Callback(hObject, eventdata, handles)
function treshold_parking_CreateFcn(hObject, eventdata, handles)
set(hObject,'Value',5)
handles.treshold_parking = 5;

guidata(hObject,handles)


function pushbutton_calc_trip_parameter_Callback(hObject, eventdata, handles)
if ~isfield(handles,'folder_name') || ~isfield(handles,'User_name')
   [handles.User_name,handles.folder_name,~] = uigetfile('.mat','DialogTitle'); 
   handles.folder_name = handles.folder_name(1:end-1);
end

get_trip_parameter (handles.folder_name, handles.User_name);



function pushbutton_create_cycle_Callback(hObject, eventdata, handles)
