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

#include "components/autofill/core/browser/payments/payments_data_cleaner.h"

#include <stddef.h>

#include <string>
#include <vector>

#include "components/autofill/core/browser/data_manager/payments/payments_data_manager.h"
#include "components/autofill/core/browser/data_model/payments/credit_card.h"
#include "components/autofill/core/browser/metrics/autofill_metrics.h"
#include "components/autofill/core/common/autofill_constants.h"

namespace autofill {

PaymentsDataCleaner::PaymentsDataCleaner(
    PaymentsDataManager* payments_data_manager)
    : payments_data_manager_(payments_data_manager) {}

PaymentsDataCleaner::~PaymentsDataCleaner() = default;

void PaymentsDataCleaner::CleanupPaymentsData() {
  DeleteDisusedCreditCards();
}

bool PaymentsDataCleaner::DeleteDisusedCreditCards() {
  // Only delete local cards, as server cards are managed by Payments.
  std::vector<const CreditCard*> cards =
      payments_data_manager_->GetLocalCreditCards();

  // Early exit when there is no local cards.
  if (cards.empty()) {
    return true;
  }

  std::vector<CreditCard> cards_to_delete;
  for (const CreditCard* card : cards) {
    if (card->IsDeletable()) {
      cards_to_delete.push_back(*card);
    }
  }

  size_t num_deleted_cards = cards_to_delete.size();

  if (num_deleted_cards > 0) {
    payments_data_manager_->DeleteLocalCreditCards(cards_to_delete);
  }

  AutofillMetrics::LogNumberOfCreditCardsDeletedForDisuse(num_deleted_cards);

  return true;
}

}  // namespace autofill
