package com.prime.sony.ecommerce.model;

import java.util.Date;

import com.prime.sony.ecommerce.util.DateHelper;
import com.prime.sony.ecommerce.util.StringUtil;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class Product extends BaseModel {

	private Long productPrimaryKey;
	private Long productId;
	private String storeId;
	private String snowflake_schema;
	private String parent_product_id;
	private String parent_product_sku;
	private Long product_variant_id;
	private String productSku;
	private String productUrl;
	private String productImageURL;
	private String productName;
	private String productDescription;
	private String type;
	private Float price;
	private Float salePrice;
	private Date sale_price_dates_from;
	private Date sale_price_dates_to;
	private String category;
	private String category_level1;
	private String category_level2;
	private String category_level3;
	private String category_level4;
	private String tag;
	private Date product_published;
	private String artist;
	private String product_gender;
	private String product_brand;
	private Date product_created_date;
	private Date product_modified_date;
	private Date consolidated_date_created;
	private Date consolidated_date_modified;
	private String errorMessage;

	public String getHeader() {
		return "Name,Artist__c,Category__c,Category_Level_1__c,Category_Level_2__c,Category_Level_3__c,"
				+ "Category_Level_4__c,Parent_Product_ID__c,Parent_Product_Sku__c,Price__c,Product_Brand__c,Product_Description__c,"
				+ "Product_Gender__c,Product_ID__c,Product_Image_URL__c,Product_Name__c,Product_Published__c,"
				+ "Product_Sku__c,Product_URL__c,Sale_Price__c,Sale_Price_Dates_From__c,Sale_Price_Dates_To__c,SnowFlake_Schema__c,"
				+ "Store_ID__c,Tag__c,Type__c,Product_Date_Created__c,Product_Date_Modified__c,Consolidated_Date_Created__c,"
				+ "Consolidated_Date_Modified__c,Product_Variant_ID__c";
	}

	public String getCSVvalue() {
		StringBuilder sb = new StringBuilder();

		// Name
		sb.append(this.getProductPrimaryKey() + ",");

		// Artist__c
		sb.append(StringUtil.validateCategory(this.getArtist()) + ",");

		// Category__c
		sb.append(StringUtil.validateCategory(this.getCategory()) + ",");

		// Category_Level_1__c
		sb.append(StringUtil.validateCategory(this.getCategory_level1()) + ",");

		// Category_Level_2__c
		sb.append(StringUtil.validateCategory(this.getCategory_level2()) + ",");

		// Category_Level_3__c
		sb.append(StringUtil.validateCategory(this.getCategory_level3()) + ",");

		// Category_Level_4__c
		sb.append(StringUtil.validateCategory(this.getCategory_level4()) + ",");

		// Parent_Product_ID__c
		sb.append(StringUtil.strValidate(this.getParent_product_id()) + ",");

		// Parent_Product_Sku__c
		sb.append(StringUtil.strValidate(this.getParent_product_sku()) + ",");

		// Price__c
		sb.append(this.getPrice() + ",");

		// Product_Brand__c
		sb.append(StringUtil.validateCategory(this.getProduct_brand()) + ",");

		// Product_Description__c
		sb.append(StringUtil.strValidate(this.getProductDescription()) + ",");

		// Product_Gender__c
		sb.append(StringUtil.validateCategory(this.getProduct_gender()) + ",");

		// Product_ID__c
		sb.append(this.getProductId() + ",");

		// Product_Image_URL__c
		sb.append(StringUtil.strValidate(this.getProductImageURL()) + ",");

		// Product_Name__c
		sb.append(StringUtil.strValidate(this.getProductName()) + ",");

		// Product_Published__c
		if (null != this.getProduct_published()) {
			sb.append(DateHelper.getFormattedDateValue(this.getProduct_published()) + ",");
		} else {
			sb.append(",");
		}

		// Product_Sku__c
		sb.append(StringUtil.strValidate(this.getProductSku()) + ",");

		// Product_URL__c
		sb.append(StringUtil.strValidate(this.getProductUrl()) + ",");

		// Sale_Price__c
		sb.append(this.getSalePrice() + ",");

		// Sale_Price_Dates_From__c
		if (null != this.getSale_price_dates_from()) {
			sb.append(DateHelper.getFormattedDateValue(this.getSale_price_dates_from()) + ",");
		} else {
			sb.append(",");
		}

		// Sale_Price_Dates_To__c
		if (null != this.getSale_price_dates_to()) {
			sb.append(DateHelper.getFormattedDateValue(this.getSale_price_dates_to()) + ",");
		} else {
			sb.append(",");
		}

		// SnowFlake_Schema__c
		sb.append(StringUtil.strValidate(this.getSnowflake_schema()) + ",");

		// Store_ID__c
		sb.append(StringUtil.strValidate(this.getStoreId()) + ",");

		// Tag__c
		sb.append(StringUtil.strValidate(this.getTag()) + ",");

		// Type__c
		sb.append(StringUtil.strValidate(this.getType()) + ",");

		// Product_Date_Created__c
		if (null != this.getProduct_created_date()) {
			sb.append(DateHelper.getFormattedDateValue(this.getProduct_created_date()) + ",");
		} else {
			sb.append(",");
		}

		// Product_Date_Modified__c
		if (null != this.getProduct_modified_date()) {
			sb.append(DateHelper.getFormattedDateValue(this.getProduct_modified_date()) + ",");
		} else {
			sb.append(",");
		}

		// Consolidated_Date_Created__c
		if (null != this.getConsolidated_date_created()) {
			sb.append(DateHelper.getFormattedDateValue(this.getConsolidated_date_created()) + ",");
		} else {
			sb.append(",");
		}

		// Consolidated_Date_Modified__c
		if (null != this.getConsolidated_date_modified()) {
			sb.append(DateHelper.getFormattedDateValue(this.getConsolidated_date_modified()) + ",");
		} else {
			sb.append(",");
		}

		// Product_Variant_ID__c
		sb.append(this.getProduct_variant_id());

		return sb.toString();
	}
}
