// Copyright 2015 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

'use strict';


var HEALTH_DISPLAY_REFRESH_MS = 1000;


$(document).ready(function() {
  // Setup the health status widget.
  $('#healthStatusDisplay').healthDisplay();
  $('#healthStatusDisplay').healthDisplay('refreshHealthDisplay');

  setInterval(function() {
    $('#healthStatusDisplay').healthDisplay('refreshHealthDisplay');
  }, HEALTH_DISPLAY_REFRESH_MS);

  // Setup the log collection button.
  $(document).on('click', '.collect-logs', function() {
    console.log('Collecting logs!');
  });

  // Setup the repair action buttons
  $(document).on('click', '.run-repair-action', function() {
    // Retrieve the service and action for this repair button.
    var action = $(this).attr('action');
    var healthcheck = $(this).closest('.healthcheck-info').attr('hcname');
    var service = $(this).closest('.health-container').attr('id');
    if (service.indexOf(SERVICE_CONTAINER_PREFIX) === 0) {
      service = service.replace(SERVICE_CONTAINER_PREFIX, '');
    }

    // Do not launch dialog if this service does not need repair.
    if (!$('#healthStatusDisplay').healthDisplay('needsRepair', service)) {
      return;
    }

    function repairServiceCallback(response) {
      $('#healthStatusDisplay').healthDisplay('markStale', response.service);
    }

    rpcActionInfo(service, healthcheck, action, function(response) {
      if (isEmpty(response.args) && isEmpty(response.kwargs)) {
        rpcRepairService(service, healthcheck, action,
                         [], {}, repairServiceCallback);
        return;
      }

      var dialog = new ActionRepairDialog(service, response);
      dialog.submitHandler = function(service, action, args, kwargs) {
        rpcRepairService(service, healthcheck, action,
                         args, kwargs, repairServiceCallback);
      };
      dialog.open();
    });
  });
});
