package PVE::APIClient::Commands::config;

use strict;
use warnings;
use Data::Dumper;

use PVE::JSONSchema qw(get_standard_option);
use PVE::Tools qw(extract_param);
use PVE::APIClient::Config;

use PVE::CLIHandler;

use base qw(PVE::CLIHandler);

__PACKAGE__->register_method ({
    name => 'list',
    path => 'list',
    method => 'GET',
    description => "Dump default configuration.",
    parameters => {
	additionalProperties => 0,
    },
    returns => { type => 'null' },
    code => sub {

	my $config = PVE::APIClient::Config->load();
	
	my $defaults = PVE::APIClient::Config->get_defaults($config);

	
	print Dumper($config);
	
	return undef;
    }});

__PACKAGE__->register_method ({
    name => 'set',
    path => 'set',
    method => 'PUT',
    description => "Update a remote configuration.",
    parameters => PVE::APIClient::DefaultsConfig->updateSchema(1),
    returns => { type => 'null'},
    code => sub {
	my ($param) = @_;

	# fixme: lock config file

	my $digest = extract_param($param, 'digest');
	my $delete = extract_param($param, 'delete');

	my $config = PVE::APIClient::Config->load();
	my $defaults = PVE::APIClient::Config->get_defaults($config);
	
	my $plugin = PVE::APIClient::Config->lookup('defaults');
	my $opts = $plugin->check_config('defaults', $param, 0, 1);

	foreach my $k (%$opts) {
	    $defaults->{$k} = $opts->{$k};
	}

	if ($delete) {
	    my $options = $plugin->private()->{options}->{'defaults'};
	    foreach my $k (PVE::Tools::split_list($delete)) {
		my $d = $options->{$k} ||
		    die "no such option '$k'\n";
		die "unable to delete required option '$k'\n"
		    if !$d->{optional};
		die "unable to delete fixed option '$k'\n"
		    if $d->{fixed};
		delete $defaults->{$k};
	    }
	}

	PVE::APIClient::Config->save($config);

	return undef;
    }});


our $cmddef = {
    set => [ __PACKAGE__, 'set',],
    list => [__PACKAGE__, 'list'],
};

1;
