package cokr.xit.fims.cmmn.pdf.print;

import cokr.xit.applib.Pstn;
import cokr.xit.fims.cmmn.PredefinedSet;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class DefaultOtptArtclStng extends PredefinedSet {
	/**
	 * 기본 출력 요소 생성
	 */
	public DefaultOtptArtclStng(String componentType, String artclNm, String artclDscrp, String otptBscVl){
		super(artclNm, artclDscrp);

		this.componentType = componentType;
		this.otptBscVl=otptBscVl;

		this.widthSz=0;
		this.heightSz=0;

		this.fontNm="gulimche";
		this.fontSz=10;
		this.fontColr="BLACK";
		this.fontStyle="FILL";

		this.textSort = "left";
		this.lineChgYn = "N";

		this.forPost = false;
		this.unique = false;

	}

	/**
	 * 용지가 A4일 때의 기본위치를 설정한다. 해당 출력요소는 1장의 출력물에서 1개만 존재한다.
	 */
	public DefaultOtptArtclStng a4(float leftPstn, float topPstn) {
		this.a4 = new Pstn(leftPstn, topPstn);
		this.unique = true;
		return this;
	}

	/**
	 * 용지가 레터일 때의 기본위치를 설정한다. 해당 출력요소는 1장의 출력물에서 1개만 존재한다.
	 */
	public DefaultOtptArtclStng letter(float leftPstn, float topPstn) {
		this.letter = new Pstn(leftPstn, topPstn);
		this.unique = true;
		return this;
	}

	/**
	 * 해당 출력요소를 우편물과 관련된 출력요소로 설정한다.
	 */
	public DefaultOtptArtclStng post() {
		this.forPost = true;
		return this;
	}

	@Override
	public DefaultOtptArtclStng offLog() {
		this.downloadData = false;
		return this;
	}

	/**
	 * 출력요소의 기본 텍스트정렬을 설정한다.
	 */
	public DefaultOtptArtclStng align(String alignValue) {
		this.textSort = alignValue;
		return this;
	}

	/**
	 * 출력요소의 기본 영역크기를 설정한다.
	 */
	public DefaultOtptArtclStng size(float width, float height) {
		this.widthSz = width;
		this.heightSz = height;
		return this;
	}

	/**
	 * 출력요소의 기본 글꼴을 설정한다.
	 */
	public DefaultOtptArtclStng font(String fontNm, int fontSz, String fontColr, String fontStyle) {
		this.fontNm = fontNm;
		this.fontSz = fontSz;
		this.fontColr = fontColr;
		this.fontStyle = fontStyle;
		return this;
	}

	/**
	 * 출력요소의 x축 위치정보를 가져온다.
	 */
	public float getLeftPstn(String paper) {
		return switch (paper) {
		case "01" -> getA4().getLeft();
		case "02" -> getLetter().getLeft();
		default -> 0;
		};
	}

	/**
	 * 출력요소의 y축 위치정보를 가져온다.
	 */
	public float getTopPstn(String paper) {
		return switch (paper) {
		case "01" -> getA4().getTop();
		case "02" -> getLetter().getTop();
		default -> 0;
		};
	}

	private String componentType; //컴포넌트 유형(텍스트 또는 이미지)
	private String otptBscVl; //기본값
	private boolean unique; //출력물 내 유일 요소 여부
	private boolean forPost; //우편물 관련 요소 여부


	private Pstn a4; //A4 위치값
	private Pstn letter; //레터 위치값
	private float widthSz; //영역크기 길이
	private float heightSz; //영역크기 높이
	private String textSort; //텍스트정렬
	private String lineChgYn;
	private String fontNm; //글꼴명
	private int fontSz; //글자크기
	private String fontColr; //글자색
	private String fontStyle; //글자스타일
}
