package # hide from PAUSE
App::DBBrowser::Opt::Get;

use warnings;
use strict;
use 5.014;

use App::DBBrowser::Auxil;


sub new {
    my ( $class, $info, $options ) = @_;
    bless {
        i => $info,
        o => $options,
    }, $class;
}


sub defaults {
    my ( $sf, $section, $key ) = @_;
    my $defaults = {
        G => {
            base_indent           => 1,
            file_find_warnings    => 0,
            warnings_table_print  => 1,
            menu_memory           => 1,
            metadata              => 0,
            operators             => [ "REGEXP", "REGEXP_i", " = ", " != ", " < ", " > ", "IS NULL", "IS NOT NULL" ],
            plugins               => [ 'SQLite' ],

            qualified_table_name  => 0,
            quote_tables          => 1,
            quote_columns         => 1,
            quote_aliases         => 0,

            limit_fetch_col_names => 1, ##
            edit_sql_menu_sq      => 0,
            pg_autocast           => 1,

            db2_encoding          => 'utf8',
        },
        alias => {
            complex_cols_select => 0,
            tables_in_join      => 0,
            join_columns        => 0,
            derived_table       => 1,
            ordinary_table      => 0,

            use_in_group_by     => 0,       # if SQLite, MySQL, MariaDB, Pg, Firebird, Informix, Oracle >= 23ai
            use_in_having       => 0,       # if SQLite, MySQL, MariaDB, Oracle >= 23ai
            use_in_order_by     => 1,
        },
        enable => {
            create_table => 0,
            drop_table   => 0,
            create_view  => 0,
            drop_view    => 0,

            insert_into => 0,
            update      => 0,
            delete      => 0,

            extended_cols   => 0,
            extended_values => 0,
            extended_args   => 0,

            m_derived   => 0,
            m_cte       => 0,
            join        => 0,
            union       => 0,
            db_settings => 0,

            j_derived  => 0,
            j_cte      => 0,

            u_derived     => 0,
            u_cte         => 0,
            u_where       => 0,
            u_parentheses => 0,
        },
        table => {
            codepage_mapping  => 0, # not an option, always 0
            hide_cursor       => 0, # not an option, always 0
            max_rows          => 0, # not an option, always 0
            page              => 2, # not an option, always 2

            binary_filter     => 0,
            binary_string     => 'BNRY',
            color             => 0,
            min_col_width     => 30,
            mouse             => 0,
            progress_bar      => 40_000,
            search            => 1,
            squash_spaces     => 0,
            tab_width         => 2,
            table_expand      => 1,
            trunc_fract_first => 1,
            undef             => '',
        },
        insert => {
            file_encoding            => 'UTF-8',
            history_dirs             => 4,
            parse_mode_input_file    => 0,
            enable_input_filter      => 0,
            empty_to_null_plain      => 1,
            empty_to_null_file       => 1,
            data_source_create_table => 2,
            data_source_insert       => 2,
            show_hidden_files        => 0,
            file_filter              => '',
        },
        create => {
            default_ai_column_name   => 'Id',
            option_ai_column_enabled => 0,
            data_type_guessing       => 1,
            table_constraint_rows    => 0,
            table_option_rows        => 0,
            view_name_prefix         => '',
        },
        split => {
            record_sep    => '\n',
            record_l_trim => '',
            record_r_trim => '',
            field_sep     => ',',
            field_l_trim  => '\s+',
            field_r_trim  => '\s+',
        },
        csv_in => {
            auto_diag => 1,  # not an option, always 1

            sep_char    => ',',
            quote_char  => '"',
            escape_char => '"',
            eol         => '',
            comment_str => '',

            allow_loose_escapes => 0,
            allow_loose_quotes  => 0,
            allow_whitespace    => 0,
            blank_is_undef      => 1,
            binary              => 1,
            decode_utf8         => 1,
            empty_is_undef      => 0,
            skip_empty_rows     => 0,
        },
        export => {
            export_dir       => $sf->{i}{home_dir},
            add_extension    => 0,
            default_filename => 0,
            file_encoding    => 'UTF-8',
        },
        csv_out => {
            auto_diag => 1,  # not an option, always 1

            sep_char    => ',',
            quote_char  => '"',
            escape_char => '"',
            eol         => '',
            undef_str   => '',

            always_quote => 0,
            binary       => 1,
            escape_null  => 1,
            quote_binary => 1,
            quote_empty  => 0,
            quote_space  => 1,
        },
    };
    return $defaults if ! $section;
    return $defaults->{$section} if ! $key;
    return $defaults->{$section}{$key};
}


sub read_config_files {
    my ( $sf ) = @_;
    my $o = $sf->defaults();
    my $ax = App::DBBrowser::Auxil->new( $sf->{i}, $sf->{o}, {} );
    my $file_fs = $sf->{i}{f_settings};
    if ( -f $file_fs && -s $file_fs ) {
        my $tmp = $ax->read_json( $file_fs ) // {};

        for my $section ( keys %$tmp ) {
            for my $opt ( keys %{$tmp->{$section}} ) {
                $o->{$section}{$opt} = $tmp->{$section}{$opt} if exists $o->{$section}{$opt};
            }
        }
    }
    return $o;
}




1;


__END__
