#include "libublsettingsui-gtk3.h"

typedef struct {
    filechooser_window *file_chooser_window;
    GtkFileFilter *ini_filter;
    GtkFileFilter *yaml_filter;
    GtkFileFilter *json_filter;
} config_file_chooser_window;

void on_config_file_chooser_destroy(GtkWidget*, config_file_chooser_window *window){
    printf("fewrgege\n");
}

void on_config_file_chooser_accept(GtkWidget *, config_file_chooser_window *window){
    switch (gtk_file_chooser_get_action(GTK_FILE_CHOOSER(window->file_chooser_window->MainFileChooser))){
        case GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER:
        case GTK_FILE_CHOOSER_ACTION_SAVE:
        if (yon_char_is_empty(window->file_chooser_window->last_success_selection)){
            yon_ubl_status_box_spawn(GTK_CONTAINER(window->file_chooser_window->StatusBox),yon_char_get_localised_from_lib(NOTHING_CHOSEN_LABEL),5,BACKGROUND_IMAGE_FAIL_TYPE);
            return;
        }
            window->file_chooser_window->responce=GTK_RESPONSE_APPLY;
            break;

        case GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER:
        case GTK_FILE_CHOOSER_ACTION_OPEN:
            window->file_chooser_window->responce = GTK_RESPONSE_ACCEPT;
            break;
    }

    char *path = NULL;
    const char *filter_name = gtk_file_filter_get_name(gtk_file_chooser_get_filter(GTK_FILE_CHOOSER(window->file_chooser_window->MainFileChooser)));
    if (window->file_chooser_window->last_success_selection){
        int ext_pos = yon_char_find_last(window->file_chooser_window->last_success_selection,'.');
        if (ext_pos==-1||strcmp(window->file_chooser_window->last_success_selection+ext_pos,filter_name)){
            path = yon_char_unite(window->file_chooser_window->last_success_selection,filter_name,NULL);
            free(window->file_chooser_window->last_success_selection);
            window->file_chooser_window->last_success_selection = path;
        }
    }


    gtk_widget_destroy(window->file_chooser_window->Window);
    gtk_main_quit();
}

filechooser_window *yon_config_file_chooser_window_new(GtkFileChooserAction action){
    config_file_chooser_window *window = malloc(sizeof(config_file_chooser_window));
    window->file_chooser_window = yon_file_chooser_window_new(action);
    window->ini_filter = gtk_file_filter_new();
    gtk_file_filter_add_pattern(window->ini_filter,"*.ini");
    gtk_file_filter_set_name(window->ini_filter,".ini");
    gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(window->file_chooser_window->MainFileChooser),window->ini_filter);
    window->yaml_filter = gtk_file_filter_new();
    gtk_file_filter_add_pattern(window->yaml_filter,"*.yaml");
    gtk_file_filter_set_name(window->yaml_filter,".yaml");
    gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(window->file_chooser_window->MainFileChooser),window->yaml_filter);
    window->json_filter = gtk_file_filter_new();
    gtk_file_filter_add_pattern(window->json_filter,"*.json");
    gtk_file_filter_set_name(window->json_filter,".json");
    gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(window->file_chooser_window->MainFileChooser),window->json_filter);
    yon_file_chooser_remove_accept_function(window->file_chooser_window);
    g_signal_connect(G_OBJECT(window->file_chooser_window->SaveButton),"clicked",G_CALLBACK(on_config_file_chooser_accept),window);
    return window->file_chooser_window;
}