package io.pivotal.cfapp.domain;

import java.time.LocalDateTime;

import com.fasterxml.jackson.annotation.JsonIgnore;

import org.apache.commons.lang3.StringUtils;
import org.springframework.data.annotation.Id;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Builder
@AllArgsConstructor(access=AccessLevel.PACKAGE)
@NoArgsConstructor(access=AccessLevel.PACKAGE)
@Getter
@EqualsAndHashCode
public class HistoricalRecord {

	@Id
	@JsonIgnore
	private Long pk;
	private LocalDateTime transactionDateTime;
	private String actionTaken;
	private String organization;
	private String space;
	private String appId;
	private String serviceInstanceId;
	private String type;
	private String name;

	public String toCsv() {
		return String.join(",",
				wrap(getTransactionDateTime() != null ? getTransactionDateTime().toString() : ""),
				wrap(getActionTaken()), wrap(getOrganization()), wrap(getSpace()), wrap(getAppId()),
				wrap(getServiceInstanceId()), wrap(getType()), wrap(getName()));
	}

	private static String wrap(String value) {
		return value != null ? StringUtils.wrap(value, '"') : StringUtils.wrap("", '"');
	}

	public static String tableName() {
		return "historical_record";
	}

	public static String[] columnNames() {
		return
			new String[] {
				"pk", "transaction_date_time", "action_taken", "organization", "space", "app_id",
				"service_instance_id", "type", "name" };
	}

	public static String headers() {
        return String.join(",", "transaction date/time", "action taken", "organization", "space",
                "application id", "service instance id", "type", "name");
    }

}