package taslar;

public class Piyon {
	public boolean firstMove = true, alive = true, promoted = false;
	public boolean sonuc;
	private String tasIsim = "piyon";
	public char isim, renk;
	public int konumSatir, konumSutun;
	Vezir promotedVezir;
	Kale promotedKale;
	Fil promotedFil;
	At promotedAt;
	
	public String getTasIsim() {
		return tasIsim;
	}
	
	public void setTasIsim(String a) {
		tasIsim = a;
	}
	
	public Piyon(char is, char re) {
		this.isim = is;
		this.renk = re;
	}
	
	public void setPosition(int x, int y) {
		this.konumSatir = x;
		this.konumSutun = y;
	}
	
	
	public void promoteEt(String isim) {
		this.tasIsim = isim;
		if(isim.equalsIgnoreCase("vezir")) {
			if(this.renk=='b') {
				promotedVezir = new Vezir('1','b');
				promotedVezir.setPosition(konumSatir, konumSutun);	
			} else {
				promotedVezir = new Vezir('1','s');
				promotedVezir.setPosition(konumSatir, konumSutun);					
			}
			promoted = true;
			
		} else if(isim.equalsIgnoreCase("kale")) {
			if(this.renk=='b') {
				promotedKale = new Kale('2', 'b');
				promotedKale.setPosition(konumSatir, konumSutun);
			} else {
				promotedKale = new Kale('2', 's');
				promotedKale.setPosition(konumSatir, konumSutun);				
			}
			promoted = true;
		} else if(isim.equalsIgnoreCase("fil")) {
			if(this.renk=='b') {
				promotedFil = new Fil('3', 'b');
				promotedFil.setPosition(konumSatir, konumSutun);
			} else {
				promotedFil = new Fil('3', 's');
				promotedFil.setPosition(konumSatir, konumSutun);				
			}
			promoted = true;
		} else if(isim.equalsIgnoreCase("at")) {
			if(this.renk=='b') {
				promotedAt = new At('4', 'b');
				promotedAt.setPosition(konumSatir, konumSutun);
			} else {
				promotedAt = new At('4', 's');
				promotedAt.setPosition(konumSatir, konumSutun);				
			}
			promoted = true;
		}
		//-#! debug System.out.println(tasIsim);
	}
	
	public boolean checkMove(char[][] T, int x, int y) {
			
				
		Character hedefChar = T[x][y];
		sonuc = true;
		
		if((this.renk == 'b') && (hedefChar.hashCode()>95)) {
			sonuc = false;
		} else if((this.renk == 's') && (hedefChar.hashCode() < 95) && (hedefChar.hashCode()>50)) {
			sonuc = false;
		}
			
			
		Character tas = T[konumSatir][konumSutun];
		Character hedef = T[x][y];

		//-- ilk hamle ise çift gitmesine izin ver
		if(tasIsim.equalsIgnoreCase("piyon")) {		
			if(firstMove==true) { 
				if(this.renk=='b') { //beyaz ise			
					if(Math.abs((konumSatir-x))<3&&(konumSatir-x)>0&&(konumSutun==y)) {
						if((tas.hashCode()>91)&&(hedef.hashCode()<91&&hedef.hashCode()>50)) {
							sonuc = false;
						} else if((tas.hashCode()<91&&tas.hashCode()>50)&&(hedef.hashCode()>91)) {
							sonuc = false;
						} else if(T[konumSatir-1][konumSutun] != '0'){
							sonuc = false;
						} else {
							sonuc = true;
							firstMove = false;
						}
					} else { 
						sonuc = false; //BUNU SİLME
						firstMove = true; //BUNU SİLME
						//-- çapraz taş yeme condition'ı buraya gelmeli
						if((konumSatir-x)<2&&(konumSatir-x)>0&&Math.abs((konumSutun-y))<2) { 
							if(tas.hashCode()>91&&(hedef.hashCode()<91&&hedef.hashCode()>50)) {//-- beyaz piyonlar için
								sonuc =true;
								firstMove = false;
							} else if((tas.hashCode()<91&&tas.hashCode()>50)&&hedef.hashCode()>91) { //-- siyah piyonlar için
								sonuc = true;
								firstMove = false;
							}
						}
						
						
						
					}
				} else { //siyah ise
					if(Math.abs((x-konumSatir))<3&&(x-konumSatir)>0&&(konumSutun==y)) {
						if((tas.hashCode()>91)&&(hedef.hashCode()<91&&hedef.hashCode()>50)) {
							sonuc = false;
						} else if((tas.hashCode()<91&&tas.hashCode()>50)&&(hedef.hashCode()>91)) {
							sonuc = false;
						} else if(T[konumSatir+1][konumSutun] != '0'){
							sonuc = false;
						} else {
							sonuc = true;
							firstMove = false;
						}
					} else {
						sonuc = false;
						firstMove = true;
						//-- çapraz taş yeme condition'ı buraya gelmeli
						if((x-konumSatir)<2&&(x-konumSatir)>0&&Math.abs((konumSutun-y))<2) { 
							if(tas.hashCode()>91&&(hedef.hashCode()<91&&hedef.hashCode()>50)) {//-- beyaz piyonlar için
								sonuc =true;
								firstMove = false;
							} else if((tas.hashCode()<91&&tas.hashCode()>50)&&hedef.hashCode()>91) { //-- siyah piyonlar için
								sonuc = true;
								firstMove = false;
							}
						}
						
					}
				}
			} else { //-- ilk hamle değilse
				if(this.renk=='b') {	//beyaz ise	
					if((konumSatir-x)<2&&(konumSatir-x)>0&&(konumSutun==y)) {
						if(tas.hashCode()>91&&(hedef.hashCode()<91&&hedef.hashCode()>50)) {
							sonuc = false;
						} else if((tas.hashCode()<91&&tas.hashCode()>50)&&(hedef.hashCode()>91)) {
							sonuc = false;
						} else {
							sonuc = true;
						}
					} else {
						sonuc = false;
						//-- çapraz taş yeme condition'ı buraya gelmeli
						if((konumSatir-x)<2&&(konumSatir-x)>0&&Math.abs((konumSutun-y))<2) { 
							if(tas.hashCode()>91&&(hedef.hashCode()<91&&hedef.hashCode()>50)) {//-- beyaz piyonlar için
								sonuc =true;
							} else if((tas.hashCode()<91&&tas.hashCode()>50)&&hedef.hashCode()>91) { //-- siyah piyonlar için
								sonuc = true;
							}
						} 					
					}
				} else { //siyah ise
					if(Math.abs((x-konumSatir))<2&&(x-konumSatir)>0&&(konumSutun==y)) {
						if((tas.hashCode()>91)&&(hedef.hashCode()<91&&hedef.hashCode()>50)) {
							sonuc = false;
						} else if((tas.hashCode()<91&&tas.hashCode()>50)&&(hedef.hashCode()>91)) {
							sonuc = false;
						} else {
							sonuc = true;
							firstMove = false;
						}
					} else {
						sonuc = false;
						//-- çapraz taş yeme condition'ı buraya gelmeli
						if((x-konumSatir)<2&&(x-konumSatir)>0&&Math.abs((konumSutun-y))<2) { 
							if(tas.hashCode()>91&&(hedef.hashCode()<91&&hedef.hashCode()>50)) {//-- beyaz piyonlar için
								sonuc =true;
							} else if((tas.hashCode()<91&&tas.hashCode()>50)&&hedef.hashCode()>91) { //-- siyah piyonlar için
								sonuc = true;
							}
						}
					}
				}
			} //PİYON BİTER
			
			
		} else if(tasIsim.equalsIgnoreCase("vezir")) {
			promoteEt(this.tasIsim);
			if(promotedVezir.checkMove(T, x, y)==false) {
				//-#! debug System.out.println("hatalı promoted vezir hamlesi");
				sonuc = false;
				
			} else {
				//-#! debug System.out.println("hatasız promoted");
				sonuc = true;
			}
			
		} else if(tasIsim.equalsIgnoreCase("kale")) {
			promoteEt(this.tasIsim);
			if(promotedKale.checkMove(T, x, y)==false) {
				//-#! debug System.out.println("hatalı promoted kale hamlesi");
				sonuc = false;
				
			}else {
				//-#! debug System.out.println("hatasız promoted");
				sonuc = true;
			}
		} else if(tasIsim.equalsIgnoreCase("at")) {
			promoteEt(this.tasIsim);
			if(promotedAt.checkMove(T, x, y)==false) {
				//-#! debug System.out.println("hatalı promoted at hamlesi");
				sonuc = false;
				
			}else {
				//-#! debug System.out.println("hatasız promoted");
				sonuc = true;
			}
		} else if(tasIsim.equalsIgnoreCase("fil")) {
			if(promotedFil.checkMove(T, x, y)==false) {
				sonuc = false;
			}else {
				sonuc = true;
			}
		} else {
			sonuc = false;
		}
		
		return sonuc;
	}		
}
