/**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
/**** 
* Classes
****/ 
var Candy = Container.expand(function (i, j, candyType) {
	var self = Container.call(this);
	var candyTypes = ["candy1", "candy2", "candy3", "candy4", "candy5", "candy6"];
	if (!candyType) {
		do {
			candyType = candyTypes[Math.floor(Math.random() * candyTypes.length)];
		} while (isPotentialMatch(i, j, candyType));
	}
	self.candyType = candyType;
	var candyGraphics = self.attachAsset(candyType, {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.i = i;
	self.j = j;
	self.isMoving = false;
	self.destroyCandy = function () {
		self.destroy();
	};
	self.transformToWhite = function () {
		self.removeChild(candyGraphics);
		self.candyType = self.candyType + "_white";
		candyGraphics = self.attachAsset(self.candyType, {
			anchorX: 0.5,
			anchorY: 0.5
		});
	};
	self.moveTo = function (newI, newJ, _onComplete) {
		self.isMoving = true;
		self.i = newI;
		self.j = newJ;
		tween(self, {
			x: newI * candySize + candySize / 2 + marginX,
			y: newJ * candySize + candySize / 2 + marginY
		}, {
			duration: 300,
			onComplete: function onComplete() {
				self.isMoving = false;
				if (_onComplete) {
					_onComplete();
				}
			}
		});
	};
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x000000
});
/**** 
* Game Code
****/ 
var score = 0;
var scoreMultiplier = 1;
var scoreTxt = new Text2('Score: 0', {
	size: 100,
	fill: 0xFFFFFF
});
scoreTxt.anchor.set(1, 0); // Anchor to the top-right corner
LK.gui.topRight.addChild(scoreTxt);
function updateScore(points) {
	score += points * scoreMultiplier;
	scoreTxt.setText('Score: ' + score);
}
var board = [];
var boardSize = 9;
var candySize = Math.min(2048, 2732) / (boardSize + 0.5);
var selectedCandy = null;
var marginY = (2732 - boardSize * candySize) / 2;
var marginX = (2048 - boardSize * candySize) / 2;
var isProcessing = false;
function isPotentialMatch(i, j, candyType) {
	// Oyun başlangıcında 3'lü eşleşmeleri engelliyoruz
	if (i >= 2 && board[i - 1][j] && board[i - 2][j] && board[i - 1][j].candyType === candyType && board[i - 2][j].candyType === candyType) {
		return true;
	}
	if (j >= 2 && board[i][j - 1] && board[i][j - 2] && board[i][j - 1].candyType === candyType && board[i][j - 2].candyType === candyType) {
		return true;
	}
	return false;
}
function initializeBoard() {
	for (var i = 0; i < boardSize; i++) {
		board[i] = [];
		for (var j = 0; j < boardSize; j++) {
			var candy = new Candy(i, j);
			candy.x = i * candySize + candySize / 2 + marginX;
			candy.y = j * candySize + candySize / 2 + marginY;
			board[i][j] = candy;
			game.addChild(candy);
		}
	}
}
function swapCandies(candy1, candy2) {
	if (!candy1 || !candy2 || isProcessing) {
		return;
	}
	var dx = Math.abs(candy1.i - candy2.i);
	var dy = Math.abs(candy1.j - candy2.j);
	if (dx === 1 && dy === 1 || dx === 0 && dy === 0) {
		return; // Çapraz veya aynı yere tıklamayı engelle
	}
	isProcessing = true;
	var tempI1 = candy1.i;
	var tempJ1 = candy1.j;
	var tempI2 = candy2.i;
	var tempJ2 = candy2.j;
	// Tahtada yerlerini değiştir
	board[tempI1][tempJ1] = candy2;
	board[tempI2][tempJ2] = candy1;
	// Görsel olarak yerlerini değiştir
	candy1.moveTo(tempI2, tempJ2);
	candy2.moveTo(tempI1, tempJ1);
	LK.setTimeout(function () {
		// Yer değiştiren her iki şekeri de kontrol et
		var matchInfo1 = checkAndDestroyMatches(candy1);
		var matchInfo2 = checkAndDestroyMatches(candy2);
		// Eşleşme yoksa geri döndür
		if (!matchInfo1.hasMatch && !matchInfo2.hasMatch) {
			board[tempI1][tempJ1] = candy1;
			board[tempI2][tempJ2] = candy2;
			candy1.moveTo(tempI1, tempJ1);
			candy2.moveTo(tempI2, tempJ2);
			candy1.i = tempI1;
			candy1.j = tempJ1;
			candy2.i = tempI2;
			candy2.j = tempJ2;
			LK.setTimeout(function () {
				isProcessing = false;
			}, 500);
		} else {
			if (matchInfo1.hasMatch) {
				// candy1 eşleşme sağladı
				if (matchInfo1.isFourMatch) {
					candy1.transformToWhite();
				} else {
					board[candy1.i][candy1.j] = null;
					candy1.destroyCandy();
				}
			}
			if (matchInfo2.hasMatch) {
				// candy2 eşleşme sağladı
				if (matchInfo2.isFourMatch) {
					candy2.transformToWhite();
				} else {
					board[candy2.i][candy2.j] = null;
					candy2.destroyCandy();
				}
			}
			LK.setTimeout(function () {
				processMatches();
			}, 300);
		}
	}, 600);
}
function checkAndDestroyMatches(candy) {
	var hasMatch = false;
	var isFourMatch = false;
	var candiesToDestroy = [];
	var i = candy.i;
	var j = candy.j;
	var matchedCandies = [candy];
	// Yatay kontrol
	var left = i - 1;
	while (left >= 0 && board[left][j] && board[left][j].candyType === candy.candyType) {
		matchedCandies.push(board[left][j]);
		left--;
	}
	var right = i + 1;
	while (right < boardSize && board[right][j] && board[right][j].candyType === candy.candyType) {
		matchedCandies.push(board[right][j]);
		right++;
	}
	if (matchedCandies.length >= 3) {
		hasMatch = true;
		if (matchedCandies.length === 4) {
			isFourMatch = true;
		}
		candiesToDestroy = candiesToDestroy.concat(matchedCandies.filter(function (c) {
			return c !== candy;
		}));
	}
	// Dikey kontrol
	matchedCandies = [candy];
	var up = j - 1;
	while (up >= 0 && board[i][up] && board[i][up].candyType === candy.candyType) {
		matchedCandies.push(board[i][up]);
		up--;
	}
	var down = j + 1;
	while (down < boardSize && board[i][down] && board[i][down].candyType === candy.candyType) {
		matchedCandies.push(board[i][down]);
		down++;
	}
	if (matchedCandies.length >= 3) {
		hasMatch = true;
		if (matchedCandies.length === 4) {
			isFourMatch = true;
		}
		candiesToDestroy = candiesToDestroy.concat(matchedCandies.filter(function (c) {
			return c !== candy;
		}));
	}
	// Eşleşen şekerleri yok et
	candiesToDestroy.forEach(function (c) {
		board[c.i][c.j] = null;
		c.destroyCandy();
	});
	if (hasMatch) {
		if (isFourMatch) {
			updateScore(100); // 4-match score
		} else {
			updateScore(50); // 3-match score
		}
		scoreMultiplier++;
	} else {
		scoreMultiplier = 1; // Reset multiplier if no match
	}
	return {
		hasMatch: hasMatch,
		isFourMatch: isFourMatch
	};
}
function processMatches() {
	refillBoard();
	LK.setTimeout(function () {
		if (checkAllMatches()) {
			LK.setTimeout(function () {
				processMatches();
			}, 300);
		} else {
			isProcessing = false;
			scoreMultiplier = 1; // Reset multiplier after processing
		}
	}, 600);
}
function checkAllMatches() {
	var foundMatch = false;
	for (var i = 0; i < boardSize; i++) {
		for (var j = 0; j < boardSize; j++) {
			if (board[i][j]) {
				var candy = board[i][j];
				var candiesToDestroy = [];
				var matchedCandies = [candy];
				// Yatay kontrol
				var left = i - 1;
				while (left >= 0 && board[left][j] && board[left][j].candyType === candy.candyType) {
					matchedCandies.push(board[left][j]);
					left--;
				}
				var right = i + 1;
				while (right < boardSize && board[right][j] && board[right][j].candyType === candy.candyType) {
					matchedCandies.push(board[right][j]);
					right++;
				}
				if (matchedCandies.length >= 3) {
					foundMatch = true;
					candiesToDestroy = candiesToDestroy.concat(matchedCandies);
					if (candiesToDestroy.length === 4) {
						updateScore(100); // 4-match score
					} else if (candiesToDestroy.length >= 3) {
						updateScore(50); // 3-match score
					}
				} else {
					// Dikey kontrol
					matchedCandies = [candy];
					var up = j - 1;
					while (up >= 0 && board[i][up] && board[i][up].candyType === candy.candyType) {
						matchedCandies.push(board[i][up]);
						up--;
					}
					var down = j + 1;
					while (down < boardSize && board[i][down] && board[i][down].candyType === candy.candyType) {
						matchedCandies.push(board[i][down]);
						down++;
					}
					if (matchedCandies.length >= 3) {
						foundMatch = true;
						candiesToDestroy = candiesToDestroy.concat(matchedCandies);
					}
				}
				// Eşleşen şekerleri yok et
				if (candiesToDestroy.length >= 3) {
					if (candiesToDestroy.length === 4) {
						updateScore(100); // 4-match score
					} else if (candiesToDestroy.length >= 3) {
						updateScore(50); // 3-match score
					}
					candiesToDestroy.forEach(function (c) {
						if (board[c.i][c.j]) {
							board[c.i][c.j] = null;
							c.destroyCandy();
						}
					});
				}
			}
		}
	}
	return foundMatch;
}
function refillBoard() {
	for (var i = 0; i < boardSize; i++) {
		var emptySpaces = 0;
		for (var j = boardSize - 1; j >= 0; j--) {
			if (!board[i][j]) {
				emptySpaces++;
			} else if (emptySpaces > 0) {
				board[i][j + emptySpaces] = board[i][j];
				board[i][j + emptySpaces].moveTo(i, j + emptySpaces);
				board[i][j] = null;
			}
		}
		for (var j = emptySpaces - 1; j >= 0; j--) {
			var newCandy = new Candy(i, j);
			newCandy.x = i * candySize + candySize / 2 + marginX;
			newCandy.y = -candySize * (emptySpaces - j) + candySize / 2 + marginY;
			board[i][j] = newCandy;
			game.addChild(newCandy);
			newCandy.moveTo(i, j);
		}
	}
}
game.down = function (x, y) {
	if (isProcessing) {
		return;
	}
	var i = Math.floor((x - marginX) / candySize);
	var j = Math.floor((y - marginY) / candySize);
	if (i >= 0 && i < boardSize && j >= 0 && j < boardSize) {
		if (selectedCandy) {
			var dx = Math.abs(selectedCandy.i - i);
			var dy = Math.abs(selectedCandy.j - j);
			if (dx === 1 && dy === 0 || dx === 0 && dy === 1) {
				swapCandies(selectedCandy, board[i][j]);
			}
			selectedCandy = null;
		} else {
			selectedCandy = board[i][j];
		}
	}
};
initializeBoard();
var resetButton = LK.getAsset('resetButton', {
	anchorX: 1,
	anchorY: 1,
	x: 2048 - 50,
	// Positioning the button at the bottom-right corner
	y: 2732 - 50
});
LK.gui.bottomRight.addChild(resetButton);
resetButton.down = function () {
	LK.showGameOver(); // This will reset the game state
}; /**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
/**** 
* Classes
****/ 
var Candy = Container.expand(function (i, j, candyType) {
	var self = Container.call(this);
	var candyTypes = ["candy1", "candy2", "candy3", "candy4", "candy5", "candy6"];
	if (!candyType) {
		do {
			candyType = candyTypes[Math.floor(Math.random() * candyTypes.length)];
		} while (isPotentialMatch(i, j, candyType));
	}
	self.candyType = candyType;
	var candyGraphics = self.attachAsset(candyType, {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.i = i;
	self.j = j;
	self.isMoving = false;
	self.destroyCandy = function () {
		self.destroy();
	};
	self.transformToWhite = function () {
		self.removeChild(candyGraphics);
		self.candyType = self.candyType + "_white";
		candyGraphics = self.attachAsset(self.candyType, {
			anchorX: 0.5,
			anchorY: 0.5
		});
	};
	self.moveTo = function (newI, newJ, _onComplete) {
		self.isMoving = true;
		self.i = newI;
		self.j = newJ;
		tween(self, {
			x: newI * candySize + candySize / 2 + marginX,
			y: newJ * candySize + candySize / 2 + marginY
		}, {
			duration: 300,
			onComplete: function onComplete() {
				self.isMoving = false;
				if (_onComplete) {
					_onComplete();
				}
			}
		});
	};
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x000000
});
/**** 
* Game Code
****/ 
var score = 0;
var scoreMultiplier = 1;
var scoreTxt = new Text2('Score: 0', {
	size: 100,
	fill: 0xFFFFFF
});
scoreTxt.anchor.set(1, 0); // Anchor to the top-right corner
LK.gui.topRight.addChild(scoreTxt);
function updateScore(points) {
	score += points * scoreMultiplier;
	scoreTxt.setText('Score: ' + score);
}
var board = [];
var boardSize = 9;
var candySize = Math.min(2048, 2732) / (boardSize + 0.5);
var selectedCandy = null;
var marginY = (2732 - boardSize * candySize) / 2;
var marginX = (2048 - boardSize * candySize) / 2;
var isProcessing = false;
function isPotentialMatch(i, j, candyType) {
	// Oyun başlangıcında 3'lü eşleşmeleri engelliyoruz
	if (i >= 2 && board[i - 1][j] && board[i - 2][j] && board[i - 1][j].candyType === candyType && board[i - 2][j].candyType === candyType) {
		return true;
	}
	if (j >= 2 && board[i][j - 1] && board[i][j - 2] && board[i][j - 1].candyType === candyType && board[i][j - 2].candyType === candyType) {
		return true;
	}
	return false;
}
function initializeBoard() {
	for (var i = 0; i < boardSize; i++) {
		board[i] = [];
		for (var j = 0; j < boardSize; j++) {
			var candy = new Candy(i, j);
			candy.x = i * candySize + candySize / 2 + marginX;
			candy.y = j * candySize + candySize / 2 + marginY;
			board[i][j] = candy;
			game.addChild(candy);
		}
	}
}
function swapCandies(candy1, candy2) {
	if (!candy1 || !candy2 || isProcessing) {
		return;
	}
	var dx = Math.abs(candy1.i - candy2.i);
	var dy = Math.abs(candy1.j - candy2.j);
	if (dx === 1 && dy === 1 || dx === 0 && dy === 0) {
		return; // Çapraz veya aynı yere tıklamayı engelle
	}
	isProcessing = true;
	var tempI1 = candy1.i;
	var tempJ1 = candy1.j;
	var tempI2 = candy2.i;
	var tempJ2 = candy2.j;
	// Tahtada yerlerini değiştir
	board[tempI1][tempJ1] = candy2;
	board[tempI2][tempJ2] = candy1;
	// Görsel olarak yerlerini değiştir
	candy1.moveTo(tempI2, tempJ2);
	candy2.moveTo(tempI1, tempJ1);
	LK.setTimeout(function () {
		// Yer değiştiren her iki şekeri de kontrol et
		var matchInfo1 = checkAndDestroyMatches(candy1);
		var matchInfo2 = checkAndDestroyMatches(candy2);
		// Eşleşme yoksa geri döndür
		if (!matchInfo1.hasMatch && !matchInfo2.hasMatch) {
			board[tempI1][tempJ1] = candy1;
			board[tempI2][tempJ2] = candy2;
			candy1.moveTo(tempI1, tempJ1);
			candy2.moveTo(tempI2, tempJ2);
			candy1.i = tempI1;
			candy1.j = tempJ1;
			candy2.i = tempI2;
			candy2.j = tempJ2;
			LK.setTimeout(function () {
				isProcessing = false;
			}, 500);
		} else {
			if (matchInfo1.hasMatch) {
				// candy1 eşleşme sağladı
				if (matchInfo1.isFourMatch) {
					candy1.transformToWhite();
				} else {
					board[candy1.i][candy1.j] = null;
					candy1.destroyCandy();
				}
			}
			if (matchInfo2.hasMatch) {
				// candy2 eşleşme sağladı
				if (matchInfo2.isFourMatch) {
					candy2.transformToWhite();
				} else {
					board[candy2.i][candy2.j] = null;
					candy2.destroyCandy();
				}
			}
			LK.setTimeout(function () {
				processMatches();
			}, 300);
		}
	}, 600);
}
function checkAndDestroyMatches(candy) {
	var hasMatch = false;
	var isFourMatch = false;
	var candiesToDestroy = [];
	var i = candy.i;
	var j = candy.j;
	var matchedCandies = [candy];
	// Yatay kontrol
	var left = i - 1;
	while (left >= 0 && board[left][j] && board[left][j].candyType === candy.candyType) {
		matchedCandies.push(board[left][j]);
		left--;
	}
	var right = i + 1;
	while (right < boardSize && board[right][j] && board[right][j].candyType === candy.candyType) {
		matchedCandies.push(board[right][j]);
		right++;
	}
	if (matchedCandies.length >= 3) {
		hasMatch = true;
		if (matchedCandies.length === 4) {
			isFourMatch = true;
		}
		candiesToDestroy = candiesToDestroy.concat(matchedCandies.filter(function (c) {
			return c !== candy;
		}));
	}
	// Dikey kontrol
	matchedCandies = [candy];
	var up = j - 1;
	while (up >= 0 && board[i][up] && board[i][up].candyType === candy.candyType) {
		matchedCandies.push(board[i][up]);
		up--;
	}
	var down = j + 1;
	while (down < boardSize && board[i][down] && board[i][down].candyType === candy.candyType) {
		matchedCandies.push(board[i][down]);
		down++;
	}
	if (matchedCandies.length >= 3) {
		hasMatch = true;
		if (matchedCandies.length === 4) {
			isFourMatch = true;
		}
		candiesToDestroy = candiesToDestroy.concat(matchedCandies.filter(function (c) {
			return c !== candy;
		}));
	}
	// Eşleşen şekerleri yok et
	candiesToDestroy.forEach(function (c) {
		board[c.i][c.j] = null;
		c.destroyCandy();
	});
	if (hasMatch) {
		if (isFourMatch) {
			updateScore(100); // 4-match score
		} else {
			updateScore(50); // 3-match score
		}
		scoreMultiplier++;
	} else {
		scoreMultiplier = 1; // Reset multiplier if no match
	}
	return {
		hasMatch: hasMatch,
		isFourMatch: isFourMatch
	};
}
function processMatches() {
	refillBoard();
	LK.setTimeout(function () {
		if (checkAllMatches()) {
			LK.setTimeout(function () {
				processMatches();
			}, 300);
		} else {
			isProcessing = false;
			scoreMultiplier = 1; // Reset multiplier after processing
		}
	}, 600);
}
function checkAllMatches() {
	var foundMatch = false;
	for (var i = 0; i < boardSize; i++) {
		for (var j = 0; j < boardSize; j++) {
			if (board[i][j]) {
				var candy = board[i][j];
				var candiesToDestroy = [];
				var matchedCandies = [candy];
				// Yatay kontrol
				var left = i - 1;
				while (left >= 0 && board[left][j] && board[left][j].candyType === candy.candyType) {
					matchedCandies.push(board[left][j]);
					left--;
				}
				var right = i + 1;
				while (right < boardSize && board[right][j] && board[right][j].candyType === candy.candyType) {
					matchedCandies.push(board[right][j]);
					right++;
				}
				if (matchedCandies.length >= 3) {
					foundMatch = true;
					candiesToDestroy = candiesToDestroy.concat(matchedCandies);
					if (candiesToDestroy.length === 4) {
						updateScore(100); // 4-match score
					} else if (candiesToDestroy.length >= 3) {
						updateScore(50); // 3-match score
					}
				} else {
					// Dikey kontrol
					matchedCandies = [candy];
					var up = j - 1;
					while (up >= 0 && board[i][up] && board[i][up].candyType === candy.candyType) {
						matchedCandies.push(board[i][up]);
						up--;
					}
					var down = j + 1;
					while (down < boardSize && board[i][down] && board[i][down].candyType === candy.candyType) {
						matchedCandies.push(board[i][down]);
						down++;
					}
					if (matchedCandies.length >= 3) {
						foundMatch = true;
						candiesToDestroy = candiesToDestroy.concat(matchedCandies);
					}
				}
				// Eşleşen şekerleri yok et
				if (candiesToDestroy.length >= 3) {
					if (candiesToDestroy.length === 4) {
						updateScore(100); // 4-match score
					} else if (candiesToDestroy.length >= 3) {
						updateScore(50); // 3-match score
					}
					candiesToDestroy.forEach(function (c) {
						if (board[c.i][c.j]) {
							board[c.i][c.j] = null;
							c.destroyCandy();
						}
					});
				}
			}
		}
	}
	return foundMatch;
}
function refillBoard() {
	for (var i = 0; i < boardSize; i++) {
		var emptySpaces = 0;
		for (var j = boardSize - 1; j >= 0; j--) {
			if (!board[i][j]) {
				emptySpaces++;
			} else if (emptySpaces > 0) {
				board[i][j + emptySpaces] = board[i][j];
				board[i][j + emptySpaces].moveTo(i, j + emptySpaces);
				board[i][j] = null;
			}
		}
		for (var j = emptySpaces - 1; j >= 0; j--) {
			var newCandy = new Candy(i, j);
			newCandy.x = i * candySize + candySize / 2 + marginX;
			newCandy.y = -candySize * (emptySpaces - j) + candySize / 2 + marginY;
			board[i][j] = newCandy;
			game.addChild(newCandy);
			newCandy.moveTo(i, j);
		}
	}
}
game.down = function (x, y) {
	if (isProcessing) {
		return;
	}
	var i = Math.floor((x - marginX) / candySize);
	var j = Math.floor((y - marginY) / candySize);
	if (i >= 0 && i < boardSize && j >= 0 && j < boardSize) {
		if (selectedCandy) {
			var dx = Math.abs(selectedCandy.i - i);
			var dy = Math.abs(selectedCandy.j - j);
			if (dx === 1 && dy === 0 || dx === 0 && dy === 1) {
				swapCandies(selectedCandy, board[i][j]);
			}
			selectedCandy = null;
		} else {
			selectedCandy = board[i][j];
		}
	}
};
initializeBoard();
var resetButton = LK.getAsset('resetButton', {
	anchorX: 1,
	anchorY: 1,
	x: 2048 - 50,
	// Positioning the button at the bottom-right corner
	y: 2732 - 50
});
LK.gui.bottomRight.addChild(resetButton);
resetButton.down = function () {
	LK.showGameOver(); // This will reset the game state
};