/*
 * Copyright 2017 Square Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.squareup.catalog.demo.example.clone;

import com.squareup.catalog.demo.util.CatalogObjectTypes;
import com.squareup.square.models.CatalogDiscount;
import com.squareup.square.models.CatalogObject;

/**
 * Utility methods used to clone a {@link CatalogDiscount}.
 */
class DiscountCloneUtil extends CatalogObjectCloneUtil<CatalogDiscount> {

  private final boolean presentAtAllLocationsByDefault;

  DiscountCloneUtil(boolean presentAtAllLocationsByDefault) {
    super(CatalogObjectTypes.DISCOUNT);
    this.presentAtAllLocationsByDefault = presentAtAllLocationsByDefault;
  }

  @Override
  CatalogDiscount getCatalogData(CatalogObject catalogObject) {
    return catalogObject.getDiscountData();
  }

  @Override
  String encodeCatalogData(CatalogDiscount discount) {
    return discount.getName()
        + ":::"
        + discount.getDiscountType()
        + ":::"
        + discount.getPercentage()
        + ":::"
        + amountOrNull(discount.getAmountMoney());
  }

  @Override
  CatalogObject removeSourceAccountMetaData(CatalogObject catalogObject) {
    CatalogObject.Builder cleanObjectBuilder =
        super.removeSourceAccountMetaData(catalogObject).toBuilder();
    if (presentAtAllLocationsByDefault) {
      cleanObjectBuilder.presentAtAllLocations(presentAtAllLocationsByDefault);
    }
    return cleanObjectBuilder.build();
  }
}
