/**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/**** 
* Classes
****/ 
var Chef = Container.expand(function () {
	var self = Container.call(this);
	var chefGraphics = self.attachAsset('chef', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.cooking = false;
	self.cookTime = 0;
	self.currentFoodType = -1; // Track which food type is being cooked
	self.targetTableIndex = -1; // Track which table the food is for
	self.update = function () {
		if (chefHasOrder && !self.cooking && !foodReady) {
			self.cooking = true;
			self.cookTime = 0;
			self.currentFoodType = currentOrderFoodType; // Remember which food to cook
			self.targetTableIndex = currentOrderTableIndex; // Remember which table it's for
			// Log which table number's order is being cooked
			if (self.targetTableIndex >= 0 && self.targetTableIndex < tables.length) {
				console.log('Chef cooking for table number: ' + tables[self.targetTableIndex].tableNumber);
			}
			chefHasOrder = false;
		}
		if (self.cooking) {
			self.cookTime++;
			if (self.cookTime > cookingSpeed) {
				self.cooking = false;
				foodReady = true;
				// Pass cooked food info back through globals
				currentOrderFoodType = self.currentFoodType;
				currentOrderTableIndex = self.targetTableIndex;
				// Reset order taken for the specific table
				if (self.targetTableIndex >= 0 && self.targetTableIndex < orderTaken.length) {
					orderTaken[self.targetTableIndex] = false;
				}
			}
		}
	};
	return self;
});
var Customer = Container.expand(function () {
	var self = Container.call(this);
	// Pick a random customer image from 10 options
	var customerImageIds = ['customer1', 'customer2', 'customer3', 'customer4', 'customer5', 'customer6', 'customer7', 'customer8', 'customer9', 'customer10'];
	self.customerImageId = customerImageIds[Math.floor(Math.random() * customerImageIds.length)];
	var customerGraphics = self.attachAsset(self.customerImageId, {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.targetTable = null;
	self.targetTableIndex = -1; // Track which table index is reserved
	self.state = 'entering'; // entering, seated, waiting, eating, paying, leaving
	self.eatingTime = 0;
	self.waitTime = 0;
	self.foodType = Math.floor(Math.random() * foodTypes.length); // Random food type
	self.drinkType = Math.floor(Math.random() * drinkTypes.length); // Random drink type
	self.drinkImage = null; // Will hold the drink image above customer
	self.update = function () {
		if (self.state === 'entering') {
			if (self.targetTable) {
				// Only allow sitting if table is not occupied and no customer is still at the table
				if (!self.targetTable.occupied && !self.targetTable.customer) {
					var dx = self.targetTable.x - self.x;
					var dy = self.targetTable.y - self.y;
					var dist = Math.sqrt(dx * dx + dy * dy);
					if (dist > 5) {
						self.x += dx / dist * customerSpeed;
						self.y += dy / dist * customerSpeed;
					} else {
						self.state = 'seated';
						self.targetTable.occupied = true;
						self.targetTable.customer = self;
					}
				} else {
					// Table is not available, clear assignment and wait
					self.targetTable = null;
					self.targetTableIndex = -1;
				}
			} else {
				// Wait in line near exit (register) if no table available
				// Move downwards from the register position (registerY)
				if (self.y < registerY + 200) {
					self.y += customerSpeed;
				}
			}
		} else if (self.state === 'eating') {
			// Show food image above customer and shrink it as food is eaten
			if (!self.foodImage) {
				// Attach food image above customer head
				self.foodImage = self.attachAsset(foodImageIds[self.foodType], {
					anchorX: 0.5,
					anchorY: 1.0,
					x: 0,
					y: -customerGraphics.height / 2 - 10,
					scaleX: 1,
					scaleY: 1
				});
				self.foodImage.baseScale = 1;
			}
			// Show drink image above customer head (to the right of food)
			if (!self.drinkImage) {
				self.drinkImage = self.attachAsset(drinkImageIds[self.drinkType], {
					anchorX: 0.5,
					anchorY: 1.0,
					x: 30,
					// right of food
					y: -customerGraphics.height / 2 - 10,
					scaleX: 1,
					scaleY: 1
				});
				self.drinkImage.baseScale = 1;
			}
			self.eatingTime++;
			// Shrink food image as eating progresses
			if (self.foodImage) {
				var progress = Math.min(1, self.eatingTime / 180);
				var scale = 1 - 0.7 * progress; // Shrink to 30% of original size
				if (scale < 0.3) scale = 0.3;
				self.foodImage.scaleX = scale;
				self.foodImage.scaleY = scale;
			}
			// Shrink drink image as eating progresses
			if (self.drinkImage) {
				var progress = Math.min(1, self.eatingTime / 180);
				var scale = 1 - 0.7 * progress;
				if (scale < 0.3) scale = 0.3;
				self.drinkImage.scaleX = scale;
				self.drinkImage.scaleY = scale;
			}
			if (self.eatingTime > 180) {
				// 3 seconds at 60fps
				self.state = 'paying';
				// Remove food image above customer
				if (self.foodImage) {
					self.foodImage.destroy();
					self.foodImage = null;
				}
				// Remove drink image above customer
				if (self.drinkImage) {
					self.drinkImage.destroy();
					self.drinkImage = null;
				}
				if (self.targetTable) {
					self.targetTable.foodDelivered = false;
					if (self.targetTable.food) {
						self.targetTable.food.destroy();
						self.targetTable.food = null;
					}
					// Remove drink from table if present
					if (self.targetTable.drink) {
						self.targetTable.drink.destroy();
						self.targetTable.drink = null;
					}
				}
			}
		} else if (self.state === 'paying') {
			var dx = registerX - self.x;
			var dy = registerY - self.y;
			var dist = Math.sqrt(dx * dx + dy * dy);
			if (dist > 5) {
				self.x += dx / dist * customerSpeed;
				self.y += dy / dist * customerSpeed;
			} else {
				// Add money based on food type price, with 25% more per upgradeSpeedLevel (active branch)
				var activeBranchUpgradeLevel = typeof upgradeSpeedLevel !== "undefined" ? upgradeSpeedLevel : 0;
				var earningMultiplier = Math.pow(1.25, activeBranchUpgradeLevel);
				var foodEarn = Math.round(foodPrices[self.foodType] * earningMultiplier);
				var drinkEarn = drinkPrices[self.drinkType];
				money += foodEarn + drinkEarn;
				// Increment food sales count
				if (typeof foodSales !== "undefined" && self.foodType >= 0 && self.foodType < foodSales.length) {
					foodSales[self.foodType]++;
				}
				// (Do not increment drink sales for Top 5 panel!)
				// Optionally: you could track drink sales in a separate array if needed.
				self.state = 'leaving';
				if (self.targetTable) {
					self.targetTable.occupied = false;
					self.targetTable.customer = null;
					self.targetTable.orderPlaced = false;
					self.targetTable.orderedFoodType = -1; // Reset food type
				}
				// Clear reservation
				if (self.targetTableIndex >= 0) {
					tableReservations[self.targetTableIndex] = false;
				}
			}
		} else if (self.state === 'leaving') {
			self.y += customerSpeed;
			if (self.y > 2800) {
				// Remove food image above customer if still present
				if (self.foodImage) {
					self.foodImage.destroy();
					self.foodImage = null;
				}
				// Remove drink image above customer if still present
				if (self.drinkImage) {
					self.drinkImage.destroy();
					self.drinkImage = null;
				}
				// Clear reservation before destroying
				if (self.targetTableIndex >= 0) {
					tableReservations[self.targetTableIndex] = false;
				}
				// Clean up food on table if still present
				if (self.targetTable && self.targetTable.food) {
					self.targetTable.food.destroy();
					self.targetTable.food = null;
					self.targetTable.foodDelivered = false;
					self.targetTable.orderPlaced = false;
					self.targetTable.orderedFoodType = -1;
				}
				// Clean up drink on table if still present
				if (self.targetTable && self.targetTable.drink) {
					self.targetTable.drink.destroy();
					self.targetTable.drink = null;
				}
				self.destroy();
				var index = customers.indexOf(self);
				if (index > -1) customers.splice(index, 1);
			}
		} else if (self.state === 'seated') {
			self.waitTime++;
			if (self.waitTime > 120) {
				// 2 seconds
				self.targetTable.orderPlaced = true;
				self.targetTable.orderedFoodType = self.foodType; // Set the food type on table
				self.state = 'waiting';
			}
		}
	};
	return self;
});
var Table = Container.expand(function () {
	var self = Container.call(this);
	var tableGraphics = self.attachAsset('table', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	var chair = self.attachAsset('chair', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 0,
		y: 60
	});
	self.occupied = false;
	self.customer = null;
	self.food = null;
	self.drink = null; // Add drink property for table
	self.orderPlaced = false;
	self.foodDelivered = false;
	self.orderedFoodType = -1; // Store which food type was ordered
	self.tableNumber = -1; // Table number for tracking
	// Create table number text
	self.numberText = new Text2('', {
		size: 50,
		fill: 0xFFFFFF,
		font: "'GillSans',Impact,'Arial Black',Tahoma" // Remove bold font
	});
	self.numberText.anchor.set(0.5, 0.5);
	self.addChild(self.numberText);
	// Method to set table number
	self.setTableNumber = function (number) {
		self.tableNumber = number;
		self.numberText.setText('' + number);
	};
	return self;
});
var Waiter = Container.expand(function () {
	var self = Container.call(this);
	var waiterGraphics = self.attachAsset('waiter', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.state = 'idle'; // idle, goingToTable, goingToFridge, goingToKitchen, deliveringFood
	self.targetTable = null;
	self.hasFood = false;
	self.food = null;
	self.carryingFoodType = -1; // Track which food type waiter is carrying
	self.targetTableIndex = -1; // Track which table the order/food is for
	self.servingTableIndex = -1; // Track which table is being served until order is complete
	// --- New for drink delivery ---
	self.hasDrink = false;
	self.drink = null;
	self.carryingDrinkType = -1;
	self.update = function () {
		if (self.state === 'idle') {
			// If currently serving a table, check for ready food for that table
			if (self.servingTableIndex >= 0 && foodReady && !foodBeingDelivered && currentOrderTableIndex === self.servingTableIndex) {
				// If food is ready, but waiter hasn't picked up drink yet, go to fridge first
				if (!self.hasDrink) {
					self.state = 'goingToFridge';
				} else {
					self.state = 'goingToKitchen';
				}
			} else if (self.servingTableIndex < 0) {
				// Only take new orders when not serving any table
				// Find the first table with an order that is not being served
				var foundTable = false;
				for (var i = 0; i < tables.length; i++) {
					// Check if any other waiter is already serving this table
					var beingServed = false;
					// Check main waiter
					if (typeof waiter !== "undefined" && waiter !== self && waiter.servingTableIndex === i) beingServed = true;
					// Check extra waiters
					if (typeof game !== "undefined" && game.extraWaiters) {
						for (var w = 0; w < game.extraWaiters.length; w++) {
							if (game.extraWaiters[w] !== self && game.extraWaiters[w].servingTableIndex === i) {
								beingServed = true;
								break;
							}
						}
					}
					// Only serve table if not being served by any waiter, and not already assigned to another waiter
					if (tables[i].orderPlaced && !orderTaken[i] && !beingServed && (self.servingTableIndex === -1 || self.servingTableIndex !== i)) {
						self.state = 'goingToTable';
						self.targetTable = tables[i];
						self.targetTableIndex = i;
						self.servingTableIndex = i; // Start serving this table
						// Log which table number is being served
						console.log('Waiter serving table number: ' + tables[i].tableNumber);
						foundTable = true;
						break;
					}
				}
				// If no table found, remain idle, but do not allow waiter to be idle if there are waiting orders
				if (!foundTable) {
					// Check if there are any tables with orderPlaced and not being served
					for (var i = 0; i < tables.length; i++) {
						var beingServed = false;
						if (typeof waiter !== "undefined" && waiter !== self && waiter.servingTableIndex === i) beingServed = true;
						if (typeof game !== "undefined" && game.extraWaiters) {
							for (var w = 0; w < game.extraWaiters.length; w++) {
								if (game.extraWaiters[w] !== self && game.extraWaiters[w].servingTableIndex === i) {
									beingServed = true;
									break;
								}
							}
						}
						if (tables[i].orderPlaced && !orderTaken[i] && !beingServed) {
							// Assign this waiter to this table
							self.state = 'goingToTable';
							self.targetTable = tables[i];
							self.targetTableIndex = i;
							self.servingTableIndex = i;
							break;
						}
					}
				}
			}
		} else if (self.state === 'goingToTable') {
			var dx = self.targetTable.x - self.x;
			var dy = self.targetTable.y - self.y;
			var dist = Math.sqrt(dx * dx + dy * dy);
			if (dist > 5) {
				// Prevent overshooting: if step is larger than dist, snap to target
				var step = waiterSpeed;
				if (step > dist) step = dist;
				self.x += dx / dist * step;
				self.y += dy / dist * step;
			} else {
				orderTaken[self.targetTableIndex] = true;
				self.carryingFoodType = self.targetTable.orderedFoodType; // Remember the food type
				// --- New: Remember the drink type for this customer ---
				if (self.targetTable.customer && typeof self.targetTable.customer.drinkType === "number") {
					self.carryingDrinkType = self.targetTable.customer.drinkType;
				} else {
					self.carryingDrinkType = Math.floor(Math.random() * drinkTypes.length);
				}
				// Pass order details to chef through global variables
				currentOrderFoodType = self.carryingFoodType;
				currentOrderTableIndex = self.targetTableIndex;
				chefHasOrder = true;
				// --- New: Go to fridge first to pick up drink ---
				self.state = 'goingToFridge';
			}
		} else if (self.state === 'goingToFridge') {
			// Move to fridge position (fridge.x, fridge.y)
			var fridgeX = kitchenX - 2 * 400;
			var fridgeY = kitchenY;
			var dx = fridgeX - self.x;
			var dy = fridgeY - self.y;
			var dist = Math.sqrt(dx * dx + dy * dy);
			if (dist > 5) {
				// Prevent overshooting: if step is larger than dist, snap to target
				var step = waiterSpeed;
				if (step > dist) step = dist;
				self.x += dx / dist * step;
				self.y += dy / dist * step;
			} else {
				// Pick up drink (show drink image above waiter)
				if (!self.hasDrink) {
					if (self.drink) {
						self.drink.destroy();
						self.drink = null;
					}
					self.drink = self.attachAsset(drinkImageIds[self.carryingDrinkType], {
						anchorX: 0.5,
						anchorY: 1.0,
						x: 30,
						y: -70,
						scaleX: 1,
						scaleY: 1
					});
					self.hasDrink = true;
				}
				// After picking up drink, go to kitchen to pick up food
				self.state = 'goingToKitchen';
			}
		} else if (self.state === 'goingToKitchen') {
			var dx = kitchenX - self.x;
			var dy = kitchenY - self.y;
			var dist = Math.sqrt(dx * dx + dy * dy);
			if (dist > 5) {
				// Prevent overshooting: if step is larger than dist, snap to target
				var step = waiterSpeed;
				if (step > dist) step = dist;
				self.x += dx / dist * step;
				self.y += dy / dist * step;
			} else {
				// Check if food is ready for pickup
				if (foodReady && !self.hasFood && currentOrderTableIndex === self.servingTableIndex) {
					self.hasFood = true;
					foodReady = false;
					foodBeingDelivered = true;
					self.carryingFoodType = currentOrderFoodType; // Remember which food type
					self.targetTableIndex = currentOrderTableIndex; // Remember target table
					if (self.food) {
						self.food.destroy();
						self.food = null;
					}
					self.food = self.attachAsset(foodImageIds[self.carryingFoodType], {
						anchorX: 0.5,
						anchorY: 0.5,
						y: -40
					});
					// Deliver to the specific table that ordered this food
					if (self.targetTableIndex >= 0 && self.targetTableIndex < tables.length) {
						self.targetTable = tables[self.targetTableIndex];
						self.state = 'deliveringFood';
					}
				} else {
					// If not serving any table and not carrying food, reset to idle so waiter doesn't get stuck at kitchen
					if (!self.hasFood && (self.servingTableIndex === -1 || typeof self.servingTableIndex === "undefined")) {
						self.state = 'idle';
						self.targetTable = null;
						self.targetTableIndex = -1;
						// --- New: Drop drink if waiter was carrying one but order is cancelled ---
						if (self.hasDrink && self.drink) {
							self.drink.destroy();
							self.drink = null;
						}
						self.hasDrink = false;
						self.carryingDrinkType = -1;
					}
				}
				// Stay at kitchen waiting for food - don't go back to idle unless above
			}
		} else if (self.state === 'deliveringFood') {
			var dx = self.targetTable.x - self.x;
			var dy = self.targetTable.y - self.y;
			var dist = Math.sqrt(dx * dx + dy * dy);
			if (dist > 5) {
				// Prevent overshooting: if step is larger than dist, snap to target
				var step = waiterSpeed;
				if (step > dist) step = dist;
				self.x += dx / dist * step;
				self.y += dy / dist * step;
			} else {
				// Remove food and drink from waiter
				if (self.food) {
					self.food.destroy();
					self.food = null;
				}
				if (self.drink) {
					self.drink.destroy();
					self.drink = null;
				}
				self.hasFood = false;
				self.hasDrink = false;
				foodBeingDelivered = false;
				// Mark food delivered and reset order state so waiter doesn't deliver again
				self.targetTable.foodDelivered = true;
				// Place food on table
				self.targetTable.food = self.targetTable.attachAsset(foodImageIds[self.carryingFoodType], {
					anchorX: 0.5,
					anchorY: 0.5,
					y: -20
				});
				// Place drink on table (to the right of food)
				if (typeof self.carryingDrinkType === "number" && self.carryingDrinkType >= 0) {
					if (self.targetTable.drink) {
						self.targetTable.drink.destroy();
						self.targetTable.drink = null;
					}
					self.targetTable.drink = self.targetTable.attachAsset(drinkImageIds[self.carryingDrinkType], {
						anchorX: 0.5,
						anchorY: 0.5,
						x: 30,
						y: -20,
						scaleX: 1,
						scaleY: 1
					});
				}
				self.targetTable.orderPlaced = false; // Reset orderPlaced so waiter doesn't deliver again
				orderTaken[self.targetTableIndex] = false; // Reset orderTaken for this table
				self.targetTable.orderedFoodType = -1; // Reset food type for this table
				if (self.targetTable.customer) {
					// Remove any artificial wait before eating, customer starts eating immediately
					self.targetTable.customer.waitTime = 121; // >120 triggers eating state in Customer
					self.targetTable.customer.state = 'eating';
				}
				self.servingTableIndex = -1; // Order complete, can serve another table
				self.targetTable = null;
				self.carryingDrinkType = -1;
				// Always immediately pick up next waiting order if available
				var foundNextTable = false;
				for (var i = 0; i < tables.length; i++) {
					// Check if any other waiter is already serving this table
					var beingServed = false;
					if (typeof waiter !== "undefined" && waiter !== self && waiter.servingTableIndex === i) beingServed = true;
					if (typeof game !== "undefined" && game.extraWaiters) {
						for (var w = 0; w < game.extraWaiters.length; w++) {
							if (game.extraWaiters[w] !== self && game.extraWaiters[w].servingTableIndex === i) {
								beingServed = true;
								break;
							}
						}
					}
					// Only serve table if not being served by any waiter, and not already assigned to another waiter
					if (tables[i].orderPlaced && !orderTaken[i] && !beingServed && (self.servingTableIndex === -1 || self.servingTableIndex !== i)) {
						self.state = 'goingToTable';
						self.targetTable = tables[i];
						self.targetTableIndex = i;
						self.servingTableIndex = i; // Start serving this table
						console.log('Waiter immediately serving next table number: ' + tables[i].tableNumber);
						foundNextTable = true;
						break;
					}
				}
				if (!foundNextTable) {
					// If there are still waiting orders, do not allow waiter to be idle
					for (var i = 0; i < tables.length; i++) {
						var beingServed = false;
						if (typeof waiter !== "undefined" && waiter !== self && waiter.servingTableIndex === i) beingServed = true;
						if (typeof game !== "undefined" && game.extraWaiters) {
							for (var w = 0; w < game.extraWaiters.length; w++) {
								if (game.extraWaiters[w] !== self && game.extraWaiters[w].servingTableIndex === i) {
									beingServed = true;
									break;
								}
							}
						}
						if (tables[i].orderPlaced && !orderTaken[i] && !beingServed) {
							self.state = 'goingToTable';
							self.targetTable = tables[i];
							self.targetTableIndex = i;
							self.servingTableIndex = i;
							break;
						}
					}
					if (self.state !== 'goingToTable') {
						self.state = 'idle';
					}
				}
			}
		}
	};
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0xF5DEB3
});
/**** 
* Game Code
****/ 
// New assets for New Restaurant and Branches buttons
// Add main menu background image (covers full game area)
function _typeof(o) {
	"@babel/helpers - typeof";
	return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
		return typeof o;
	} : function (o) {
		return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
	}, _typeof(o);
}
// Use background image at its native resolution, do not scale up
var mainMenuBg = game.addChild(LK.getAsset('mainMenuBg', {
	anchorX: 0,
	anchorY: 0,
	x: 0,
	y: 0
}));
// Game variables
// Food image assets (replace with your own images as needed)
// For full reset, if storage.resetFlag is set, delete all storage keys
if (typeof storage.resetFlag !== "undefined" && storage.resetFlag === true) {
	// Delete all own keys except resetFlag itself (to avoid issues during iteration)
	var keysToDelete = [];
	for (var key in storage) {
		if (storage.hasOwnProperty(key) && key !== "resetFlag") {
			keysToDelete.push(key);
		}
	}
	for (var i = 0; i < keysToDelete.length; i++) {
		delete storage[keysToDelete[i]];
	}
	// Unset resetFlag after clearing
	delete storage.resetFlag;
}
// Start game from scratch on launch
var money = typeof storage.money !== "undefined" ? storage.money : 2000;
var restaurantLevel = storage.restaurantLevel || 1;
var tableCount = storage.tableCount || 2;
var tableReservations = []; // Track which tables are reserved by customers
// Food types
var foodTypes = ['pizza', 'burger', 'pasta', 'salad', 'soup', 'sushi', 'steak', 'curry', 'taco', 'dumpling'];
var foodNames = ['Pizza', 'Burger', 'Pasta', 'Salad', 'Soup', 'Sushi', 'Steak', 'Curry', 'Taco', 'Dumpling'];
var foodImageIds = ['food_pizza', 'food_burger', 'food_pasta', 'food_salad', 'food_soup', 'food_sushi', 'food_steak', 'food_curry', 'food_taco', 'food_dumpling'];
var foodColors = [0xff6347, 0x8b4513, 0xffa500, 0x32cd32, 0xffd700, 0x6ad1e3, 0x8b0000, 0xf7b32b, 0xf4a259, 0xf7e7ce];
// Food prices: multiples of 6, each next is 10% more (rounded to nearest integer)
var foodPrices = [6, 7, 8, 9, 10, 11, 12, 13, 14, 15]; // Will be set below
// Calculate food prices as 6, 6*1.1, 6*1.21, ... for all foodTypes (rounded)
foodPrices[0] = 6;
for (var i = 1; i < foodTypes.length; i++) {
	foodPrices[i] = Math.round(foodPrices[i - 1] * 1.1);
}
// --- Drink types, images, and prices ---
var drinkTypes = ['cola', 'fanta', 'sprite', 'ayran', 'soda', 'water', 'ice_tea', 'lemonade', 'orange_juice', 'coffee'];
var drinkNames = ['Cola', 'Fanta', 'Sprite', 'Ayran', 'Soda', 'Water', 'Ice Tea', 'Lemonade', 'Orange Juice', 'Coffee'];
var drinkImageIds = ['drink_cola', 'drink_fanta', 'drink_sprite', 'drink_ayran', 'drink_soda', 'drink_water', 'drink_icetea', 'drink_lemonade', 'drink_orangejuice', 'drink_coffee'];
// Register drink images as assets (dummy id for now, should be replaced with real image ids)
// Drink prices: 2, 4, 6, ..., 20
var drinkPrices = [];
for (var i = 0; i < drinkTypes.length; i++) {
	drinkPrices[i] = 2 * (i + 1);
}
// Speed variables (lower is faster)
var customerSpeed = 3;
var waiterBaseSpeed = 4; // Use this as the base for scaling waiterSpeed
var waiterSpeed = waiterBaseSpeed;
var cookingSpeed = 180; // 3 seconds at 60fps
// Game state
var tables = [];
var customers = [];
var orderTaken = [];
var chefHasOrder = false;
var foodReady = false;
var foodBeingDelivered = false;
var currentOrderFoodType = -1; // Track current order food type
var currentOrderTableIndex = -1; // Track current order table index
// Positions
var kitchenX = 1024;
var kitchenY = 400;
var registerX = 1024;
var registerY = 2400;
// UI Elements
var moneyText = new Text2('Money: $0', {
	size: 36,
	fill: 0xFFFFFF,
	font: "'GillSans',Tahoma" // Remove bold font
});
moneyText.anchor.set(0.5, 0);
LK.gui.top.addChild(moneyText);
// --- Day Counter ---
var day = typeof storage.day !== "undefined" ? storage.day : 1;
var dayText = new Text2('Day: 1', {
	size: 32,
	fill: 0xFFFF00,
	font: "'GillSans',Tahoma"
});
dayText.anchor.set(0.5, 0);
dayText.x = moneyText.x;
dayText.y = moneyText.y + moneyText.height + 4;
LK.gui.top.addChild(dayText);
// --- Current Branch Name Display (under day counter) ---
var currentBranchNameText = new Text2('', {
	size: 36,
	fill: 0xFFFFFF,
	font: "'GillSans',Tahoma"
});
currentBranchNameText.anchor.set(0.5, 0);
currentBranchNameText.x = moneyText.x;
currentBranchNameText.y = dayText.y + dayText.height + 4;
LK.gui.top.addChild(currentBranchNameText);
function updateCurrentBranchNameText() {
	if (branches && branches[currentBranchIndex] && branches[currentBranchIndex].name) {
		currentBranchNameText.setText(branches[currentBranchIndex].name);
	} else {
		currentBranchNameText.setText('');
	}
}
updateCurrentBranchNameText();
// --- Bank Button and Panel ---
// --- Music Toggle Icon/Button ---
// Use a simple text icon for music (🔊/🔇), or you can use an image asset if available
var musicOn = true;
var musicIcon = new Text2('🔊', {
	size: 36,
	fill: 0xFFFFFF,
	font: "'GillSans',Tahoma"
});
musicIcon.anchor.set(0, 0);
musicIcon.x = moneyText.x + moneyText.width + 40; // 1 row to the right of Money
musicIcon.y = moneyText.y;
musicIcon.interactive = true;
musicIcon.buttonMode = true;
LK.gui.top.addChild(musicIcon);
// Play music at start
LK.playMusic('Background', {
	loop: true
});
// Toggle music on icon press
musicIcon.down = function () {
	if (musicOn) {
		LK.stopMusic();
		musicIcon.setText('🔇');
		musicOn = false;
	} else {
		LK.playMusic('Background', {
			loop: true
		});
		musicIcon.setText('🔊');
		musicOn = true;
	}
};
// --- Bank Button and Panel ---
var bankButton = new Text2('Bank', {
	size: 36,
	fill: 0x00FFCC,
	font: "'GillSans',Tahoma"
});
bankButton.anchor.set(0, 0);
bankButton.x = musicIcon.x + musicIcon.width + 40; // 1 row to the right of music icon
bankButton.y = moneyText.y;
bankButton.interactive = true;
bankButton.buttonMode = true;
LK.gui.top.addChild(bankButton);
// --- How to Play Button and Panel ---
var howToPlayButton = new Text2('How to Play?', {
	size: 36,
	fill: 0x00CCFF,
	font: "'GillSans',Tahoma"
});
howToPlayButton.anchor.set(0, 0);
// Place 1 row to the right from Bank button (use width + margin)
howToPlayButton.x = bankButton.x + bankButton.width + 40;
howToPlayButton.y = bankButton.y;
howToPlayButton.interactive = true;
howToPlayButton.buttonMode = true;
LK.gui.top.addChild(howToPlayButton);
var howToPlayPanel = null;
function hideHowToPlayPanel() {
	if (howToPlayPanel && howToPlayPanel.parent) {
		howToPlayPanel.parent.removeChild(howToPlayPanel);
		howToPlayPanel = null;
	}
}
function showHowToPlayPanel() {
	hideHowToPlayPanel();
	howToPlayPanel = new Container();
	// Panel background (reuse branchesPanelBg, 800x1080)
	// Use panel background at its native resolution, do not scale up
	var panelBg = LK.getAsset('branchesPanelBg', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 1024,
		y: 1366
	});
	panelBg.alpha = 0.98;
	howToPlayPanel.addChild(panelBg);
	// Title
	var panelTitle = new Text2('How to Play', {
		size: 54,
		fill: 0x00CCFF,
		font: "'GillSans',Tahoma"
	});
	panelTitle.anchor.set(0.5, 0);
	panelTitle.x = 1024;
	panelTitle.y = 900;
	howToPlayPanel.addChild(panelTitle);
	// Info text (multi-line, word wrap)
	var infoText = new Text2("Welcome to Restaurant Tycoon!\n\n" + "• Customers will arrive and sit at available tables.\n" + "• Waiters take orders, pick up food and drinks, and deliver them to tables.\n" + "• Earn money by serving food and drinks. Upgrade your restaurant for faster service and more customers.\n" + "• Use the Bank to take credits or open deposits for extra money.\n" + "• Open new branches to expand your business. Each branch has its own upgrades.\n" + "• Compete with rival companies and buy shares to increase your wealth.\n\n" + "Tip: Upgrade your speed and advertisement to serve more customers and earn more money!\n\n" + "Good luck and have fun!", {
		size: 32,
		fill: 0xFFFFFF,
		wordWrap: true,
		wordWrapWidth: 700,
		font: "'GillSans',Tahoma"
	});
	infoText.anchor.set(0.5, 0);
	infoText.x = 1024;
	infoText.y = 980;
	howToPlayPanel.addChild(infoText);
	// Close button
	var closeBtn = new Text2('Close', {
		size: 36,
		fill: 0xFFFFFF
	});
	closeBtn.anchor.set(1, 0);
	closeBtn.x = 1024 + 400 - 24;
	closeBtn.y = 900 + 16;
	closeBtn.interactive = true;
	closeBtn.buttonMode = true;
	closeBtn.down = function () {
		hideHowToPlayPanel();
	};
	howToPlayPanel.addChild(closeBtn);
	howToPlayPanel.visible = true;
	game.addChild(howToPlayPanel);
}
howToPlayButton.down = function () {
	showHowToPlayPanel();
};
var bankPanel = null;
var bankCreditActive = false;
var bankCreditAmount = 0;
var bankCreditDueTick = 0;
var bankDepositActive = false;
var bankDepositAmount = 0;
var bankDepositDueTick = 0;
// Helper to close bank panel
function hideBankPanel() {
	if (bankPanel && bankPanel.parent) {
		bankPanel.parent.removeChild(bankPanel);
		bankPanel = null;
	}
}
// Show Bank Panel
function showBankPanel() {
	hideBankPanel();
	bankPanel = new Container();
	// 50% scale up factor for more space
	var scaleFactor = 1.5;
	// Panel background (800x1080 -> 1200x1620) and shift 20% to the right
	var bankPanelBgWidth = 1200; // 800 * 1.5
	var bankPanelBgHeight = 1620; // 1080 * 1.5
	var bankPanelBgX = 1024 + (bankPanelBgWidth - 800 * scaleFactor) / 2; // 20% to the right, keep similar logic
	// Use panel background at its native resolution, do not scale up
	var panelBg = LK.getAsset('branchesPanelBg', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: bankPanelBgX,
		y: 1366,
		width: bankPanelBgWidth,
		height: bankPanelBgHeight
	});
	panelBg.alpha = 0.98;
	bankPanel.addChild(panelBg);
	// New panel width and alignment references
	var panelWidth = bankPanelBgWidth;
	var panelHeight = bankPanelBgHeight;
	var leftX = bankPanelBgX - panelWidth / 2 + 80 * scaleFactor;
	var rightX = bankPanelBgX + 80 * scaleFactor;
	// Move all Bank panel content up by 2 rows (180px)
	var sectionY = 950 * scaleFactor / 1.25 + 20 * scaleFactor - 180; // Shift up by 180px (2 rows)
	// Title
	var panelTitle = new Text2('Bank', {
		size: 48 * scaleFactor,
		fill: 0x00FFCC,
		font: "'GillSans',Tahoma"
	});
	panelTitle.anchor.set(0.5, 0);
	panelTitle.x = 1024;
	panelTitle.y = sectionY;
	bankPanel.addChild(panelTitle);
	// --- Vertically stacked Credit and Deposit sections inside the panel ---
	// Start Y for first section (Credit)
	var sectionStartY = sectionY + 90 * scaleFactor;
	// --- Credit Section ---
	var creditTitle = new Text2('Credit', {
		size: 36 * scaleFactor,
		fill: 0xFFFFFF,
		font: "'GillSans',Tahoma"
	});
	creditTitle.anchor.set(0, 0);
	creditTitle.x = leftX;
	creditTitle.y = sectionStartY;
	bankPanel.addChild(creditTitle);
	var canTakeCredit = !bankCreditActive;
	var creditOffer = Math.floor(money * 0.2);
	var creditInfoLine1, creditInfoLine2;
	if (canTakeCredit) {
		creditInfoLine1 = 'Take a credit of $' + creditOffer;
		creditInfoLine2 = '(10 days, 10% interest)';
	} else {
		creditInfoLine1 = 'Active Credit: $' + bankCreditAmount;
		var creditDueDay = typeof bankCreditDueDay !== "undefined" ? bankCreditDueDay : day + 10;
		var daysLeft = Math.max(0, creditDueDay - day);
		creditInfoLine2 = '(Due in ' + daysLeft + ' days)';
	}
	var creditText1 = new Text2(creditInfoLine1, {
		size: 28 * scaleFactor,
		fill: 0xFFFFFF,
		font: "'GillSans',Tahoma"
	});
	creditText1.anchor.set(0, 0);
	creditText1.x = leftX;
	creditText1.y = creditTitle.y + 60 * scaleFactor;
	bankPanel.addChild(creditText1);
	var creditText2 = new Text2(creditInfoLine2, {
		size: 24 * scaleFactor,
		fill: 0xCCCCCC,
		font: "'GillSans',Tahoma"
	});
	creditText2.anchor.set(0, 0);
	creditText2.x = leftX;
	creditText2.y = creditText1.y + creditText1.height + 2 * scaleFactor;
	bankPanel.addChild(creditText2);
	var creditBtn = new Text2('Take Credit', {
		size: 32 * scaleFactor,
		fill: canTakeCredit ? 0x00FF00 : 0x888888,
		font: "'GillSans',Tahoma"
	});
	creditBtn.anchor.set(0, 0);
	creditBtn.x = leftX;
	creditBtn.y = creditText2.y + creditText2.height + 12 * scaleFactor;
	creditBtn.interactive = canTakeCredit;
	creditBtn.buttonMode = canTakeCredit;
	creditBtn.down = function () {
		if (!bankCreditActive) {
			bankCreditActive = true;
			bankCreditAmount = creditOffer;
			bankCreditDueDay = day + 10;
			bankCreditDueTick = LK.ticks + 10 * 60 * 60 * 24;
			money += bankCreditAmount;
			storage.money = money;
			storage.bankCreditDueDay = bankCreditDueDay;
			hideBankPanel();
			showBankPanel();
		}
	};
	bankPanel.addChild(creditBtn);
	var payableAmount = 0;
	if (bankCreditActive) {
		payableAmount = Math.floor(bankCreditAmount * 1.10);
	} else {
		payableAmount = Math.floor(creditOffer * 1.10);
	}
	var payableText = new Text2("Payable: $" + payableAmount, {
		size: 24 * scaleFactor,
		fill: 0xFF8888,
		font: "'GillSans',Tahoma"
	});
	payableText.anchor.set(0, 0);
	payableText.x = creditBtn.x + creditBtn.width + 32 * scaleFactor;
	payableText.y = creditBtn.y + 4 * scaleFactor;
	bankPanel.addChild(payableText);
	var infoTextCredit = new Text2("You can take a credit for 10 days at 10% interest (max 20% of your current money).", {
		size: 24 * scaleFactor,
		fill: 0xFFFFCC,
		wordWrap: true,
		wordWrapWidth: 400 * scaleFactor,
		font: "'GillSans',Tahoma"
	});
	infoTextCredit.anchor.set(0, 0);
	infoTextCredit.x = leftX;
	infoTextCredit.y = creditBtn.y + creditBtn.height + 12 * scaleFactor;
	bankPanel.addChild(infoTextCredit);
	// --- Deposit Section (stacked below Credit) ---
	var depositSectionStartY = infoTextCredit.y + infoTextCredit.height + 48 * scaleFactor;
	var depositTitle = new Text2('Deposit', {
		size: 36 * scaleFactor,
		fill: 0xFFFFFF,
		font: "'GillSans',Tahoma"
	});
	depositTitle.anchor.set(0, 0);
	depositTitle.x = leftX;
	depositTitle.y = depositSectionStartY;
	bankPanel.addChild(depositTitle);
	var canDeposit = !bankDepositActive && money > 0;
	var depositOffer = Math.floor(money * 0.5);
	var depositInfoLine1, depositInfoLine2;
	if (bankDepositActive) {
		depositInfoLine1 = 'Active Deposit: $' + bankDepositAmount;
		var depositDueDay = typeof bankDepositDueDay !== "undefined" ? bankDepositDueDay : day + 10;
		var depositDaysLeft = Math.max(0, depositDueDay - day);
		depositInfoLine2 = '(Due in ' + depositDaysLeft + ' days)';
	} else {
		depositInfoLine1 = 'Open a deposit up to $' + depositOffer;
		depositInfoLine2 = '(10 days, 20% interest)';
	}
	var depositText1 = new Text2(depositInfoLine1, {
		size: 28 * scaleFactor,
		fill: 0xFFFFFF,
		font: "'GillSans',Tahoma"
	});
	depositText1.anchor.set(0, 0);
	depositText1.x = leftX;
	depositText1.y = depositTitle.y + 60 * scaleFactor;
	bankPanel.addChild(depositText1);
	var depositText2 = new Text2(depositInfoLine2, {
		size: 24 * scaleFactor,
		fill: 0xCCCCCC,
		font: "'GillSans',Tahoma"
	});
	depositText2.anchor.set(0, 0);
	depositText2.x = leftX;
	depositText2.y = depositText1.y + depositText1.height + 2 * scaleFactor;
	bankPanel.addChild(depositText2);
	var depositBtn = new Text2('Open Deposit', {
		size: 32 * scaleFactor,
		fill: canDeposit ? 0x00FF00 : 0x888888,
		font: "'GillSans',Tahoma"
	});
	depositBtn.anchor.set(0, 0);
	depositBtn.x = leftX;
	depositBtn.y = depositText2.y + depositText2.height + 12 * scaleFactor;
	depositBtn.interactive = canDeposit;
	depositBtn.buttonMode = canDeposit;
	depositBtn.down = function () {
		if (!bankDepositActive && money > 0) {
			bankDepositActive = true;
			bankDepositAmount = depositOffer;
			bankDepositDueDay = day + 10;
			bankDepositDueTick = LK.ticks + 10 * 60 * 60 * 24;
			money -= bankDepositAmount;
			storage.money = money;
			storage.bankDepositDueDay = bankDepositDueDay;
			hideBankPanel();
			showBankPanel();
		}
	};
	bankPanel.addChild(depositBtn);
	var receivableAmount = 0;
	if (bankDepositActive) {
		receivableAmount = Math.floor(bankDepositAmount * 1.20);
	} else {
		receivableAmount = Math.floor(depositOffer * 1.20);
	}
	var receivableText = new Text2("Receivable: $" + receivableAmount, {
		size: 24 * scaleFactor,
		fill: 0x88FF88,
		font: "'GillSans',Tahoma"
	});
	receivableText.anchor.set(0, 0);
	receivableText.x = depositBtn.x + depositBtn.width + 32 * scaleFactor;
	receivableText.y = depositBtn.y + 4 * scaleFactor;
	bankPanel.addChild(receivableText);
	var infoTextDeposit = new Text2("You can open a deposit for 10 days at 20% interest (max 50% of your current money).", {
		size: 24 * scaleFactor,
		fill: 0xFFFFCC,
		wordWrap: true,
		wordWrapWidth: 400 * scaleFactor,
		font: "'GillSans',Tahoma"
	});
	infoTextDeposit.anchor.set(0, 0);
	infoTextDeposit.x = leftX;
	infoTextDeposit.y = depositBtn.y + depositBtn.height + 12 * scaleFactor;
	bankPanel.addChild(infoTextDeposit);
	// General info text at the bottom
	var infoTextGeneral = new Text2("You can only have one active credit and one active deposit at a time.", {
		size: 22 * scaleFactor,
		fill: 0xFFFFCC,
		wordWrap: true,
		wordWrapWidth: 700 * scaleFactor,
		font: "'GillSans',Tahoma"
	});
	infoTextGeneral.anchor.set(0.5, 0);
	// Move up slightly to ensure it fits inside the panel and doesn't overlap
	infoTextGeneral.x = 1024;
	infoTextGeneral.y = sectionY + panelHeight - 120 * scaleFactor;
	bankPanel.addChild(infoTextGeneral);
	// Close button
	var closeBtn = new Text2('Close', {
		size: 36 * scaleFactor,
		fill: 0xFFFFFF
	});
	closeBtn.anchor.set(1, 0);
	closeBtn.x = 1024 + panelWidth / 2 - 32 * scaleFactor;
	closeBtn.y = sectionY + 16 * scaleFactor;
	closeBtn.interactive = true;
	closeBtn.buttonMode = true;
	closeBtn.down = function () {
		hideBankPanel();
	};
	bankPanel.addChild(closeBtn);
	bankPanel.visible = true;
	game.addChild(bankPanel);
}
bankButton.down = function () {
	showBankPanel();
};
// --- Reset Game Button (to the left of the coin) ---
var resetButton = new Text2('Reset', {
	size: 48,
	fill: 0xFFFFFF,
	wordWrap: true,
	wordWrapWidth: 140
});
resetButton.anchor.set(1, 0); // right-top anchor
resetButton.x = moneyText.x - 180 - 2048 * 0.05; // Move 5% of screen width further left
resetButton.y = moneyText.y + 8; // Align vertically with moneyText
resetButton.interactive = true;
resetButton.buttonMode = true;
resetButton.down = function () {
	// Yeniden başlatınca storage.resetFlag ayarla, sonraki açılışta tüm storage silinsin
	storage.resetFlag = true;
	LK.showGameOver(); // This will reset the game state
};
LK.gui.top.addChild(resetButton);
// --- Top 5 Most Sold Foods Panel (below Son Satış) ---
var foodSales = [];
for (var i = 0; i < foodTypes.length; i++) {
	foodSales[i] = 0;
}
// Panel background image for Top 5 Most Sold Foods
var top5PanelBg = LK.getAsset('top5PanelBg', {
	anchorX: 1,
	anchorY: 0,
	x: 2048,
	y: 120,
	width: 500,
	height: 385 // 350 * 1.1 = 385
});
top5PanelBg.alpha = 0.92;
game.addChild(top5PanelBg);
var top5Title = new Text2('TOP 5', {
	size: 40,
	fill: 0xFFFFFF,
	font: "'GillSans',Tahoma" // Remove bold font
});
// Anchor left-top
top5Title.anchor.set(0, 0);
// Align to left edge of the panel (panel x = 2048, width = 500)
top5Title.x = 2048 - 500 + 20;
top5Title.y = 140;
game.addChild(top5Title);
var top5TextLines = [];
for (var i = 0; i < 5; i++) {
	var txt = new Text2('', {
		size: 36,
		fill: 0xFFFFFF,
		font: "'GillSans',Tahoma" // Remove bold font
	});
	// Anchor left-top
	txt.anchor.set(0, 0);
	// Align to left edge of the panel (panel x = 2048, width = 500)
	txt.x = 2048 - 500 + 20;
	txt.y = 200 + i * 55;
	game.addChild(txt);
	top5TextLines.push(txt);
}
// Add fridge image to the left of the kitchen, 2 satır (columns) left
var fridge = game.addChild(LK.getAsset('fridge', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: kitchenX - 2 * 400,
	// 2 kitchen widths left
	y: kitchenY
}));
// Create kitchen
var kitchen = game.addChild(LK.getAsset('kitchen', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: kitchenX,
	y: kitchenY
}));
// Create register
var register = game.addChild(LK.getAsset('register', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: registerX,
	y: registerY
}));
// Create chef
var chef = game.addChild(new Chef());
chef.x = kitchenX;
chef.y = kitchenY;
// Create waiter
var waiter = game.addChild(new Waiter());
// Spawn main waiter in front of the register (kasa)
waiter.x = registerX - 120;
waiter.y = registerY + 60;
// Always initialize extraWaiters as an array so new waiters can be added and updated
game.extraWaiters = [];
// Create initial tables
function createTable(index) {
	var table = game.addChild(new Table());
	// Arrange tables in rows of 5
	var row = Math.floor(index / 5);
	var col = index % 5;
	table.x = 300 + col * 300;
	table.y = 800 + row * 300;
	table.setTableNumber(index + 1); // Set table number (1-based)
	tables.push(table);
	orderTaken.push(false);
	tableReservations.push(false); // Initialize reservation status
}
for (var i = 0; i < tableCount; i++) {
	createTable(i);
}
// Upgrade speed button
var upgradeButton = game.addChild(LK.getAsset('upgradeButton', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: 500,
	y: 2200
}));
var upgradeText = new Text2('Upgrade Speed $50', {
	size: 36,
	fill: 0xFFFFFF,
	wordWrap: true,
	wordWrapWidth: 260
});
upgradeText.anchor.set(0.5, 0.5);
upgradeText.x = 500;
upgradeText.y = 2200;
game.addChild(upgradeText);
// Track upgrade cost and max level
var upgradeSpeedLevel = typeof storage.upgradeSpeedLevel !== "undefined" ? storage.upgradeSpeedLevel : 0;
var upgradeSpeedCost = typeof storage.upgradeSpeedCost !== "undefined" ? storage.upgradeSpeedCost : 50;
var UPGRADE_SPEED_MAX_LEVEL = 10;
function updateUpgradeText() {
	if (upgradeSpeedLevel >= UPGRADE_SPEED_MAX_LEVEL) {
		upgradeText.setText('Upgrade Speed (MAX)');
	} else {
		upgradeText.setText('Upgrade Speed $' + upgradeSpeedCost);
	}
}
upgradeButton.down = function () {
	if (upgradeSpeedLevel < UPGRADE_SPEED_MAX_LEVEL && money >= upgradeSpeedCost) {
		money -= upgradeSpeedCost;
		upgradeSpeedLevel++;
		upgradeSpeedCost = Math.floor(upgradeSpeedCost * 1.5);
		restaurantLevel++;
		// Only update current branch's upgradeSpeedLevel and derived stats
		if (branches[currentBranchIndex]) {
			branches[currentBranchIndex].upgradeSpeedLevel = upgradeSpeedLevel;
			// waiterSpeed: Each level increases speed by 50% (waiterSpeed = base * 1.5^level), max 20
			if (typeof waiterBaseSpeed === "undefined") {
				waiterBaseSpeed = 4;
			}
			branches[currentBranchIndex].waiterSpeed = Math.min(20, waiterBaseSpeed * Math.pow(1.5, upgradeSpeedLevel));
			if (branches[currentBranchIndex].waiterSpeed > 20) branches[currentBranchIndex].waiterSpeed = 20;
			branches[currentBranchIndex].cookingSpeed = Math.max(60, 180 - 20 * upgradeSpeedLevel);
			// Save waiterSpeed and cookingSpeed to branch after upgrade
			waiterSpeed = branches[currentBranchIndex].waiterSpeed;
			cookingSpeed = branches[currentBranchIndex].cookingSpeed;
			branches[currentBranchIndex].waiterSpeed = waiterSpeed;
			branches[currentBranchIndex].cookingSpeed = cookingSpeed;
		}
		// Update local variables from branch
		waiterSpeed = branches[currentBranchIndex].waiterSpeed;
		cookingSpeed = branches[currentBranchIndex].cookingSpeed;
		storage.restaurantLevel = restaurantLevel;
		storage.money = money;
		storage.upgradeSpeedLevel = upgradeSpeedLevel;
		storage.upgradeSpeedCost = upgradeSpeedCost;
		LK.effects.flashObject(upgradeButton, 0x00FF00, 500);
		updateUpgradeText();
	}
};
updateUpgradeText();
// --- Advertisement Upgrade Button below Upgrade Speed ---
var advertisementLevel = typeof storage.advertisementLevel !== "undefined" ? storage.advertisementLevel : 0;
var advertisementButton = game.addChild(LK.getAsset('upgradeButton', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: 500,
	y: 2280
}));
var advertisementText = new Text2('Advertisement $100', {
	size: 36,
	fill: 0xFFFFFF,
	wordWrap: true,
	wordWrapWidth: 260
});
advertisementText.anchor.set(0.5, 0.5);
advertisementText.x = 500;
advertisementText.y = 2280;
game.addChild(advertisementText);
// Track advertisement upgrade cost, default to 100 * (advertisementLevel+1)
var advertisementCost = typeof storage.advertisementCost !== "undefined" ? storage.advertisementCost : 100 * (advertisementLevel + 1);
function updateAdvertisementText() {
	if (advertisementLevel >= ADVERTISEMENT_MAX_LEVEL) {
		advertisementText.setText('Advertisement (MAX)');
	} else {
		advertisementText.setText('Advertisement $' + advertisementCost);
	}
}
var ADVERTISEMENT_MAX_LEVEL = 5;
advertisementButton.down = function () {
	if (advertisementLevel >= ADVERTISEMENT_MAX_LEVEL) {
		LK.effects.flashObject(advertisementButton, 0xFF0000, 500);
		return;
	}
	if (money >= advertisementCost) {
		money -= advertisementCost;
		advertisementLevel++;
		advertisementCost = 100 * (advertisementLevel + 1);
		storage.advertisementLevel = advertisementLevel;
		storage.advertisementCost = advertisementCost;
		storage.money = money;
		LK.effects.flashObject(advertisementButton, 0x00FF00, 500);
		updateAdvertisementText();
	}
};
updateAdvertisementText();
// --- Customer Speed Upgrade Button below Advertisement ---
var customerSpeedLevel = typeof storage.customerSpeedLevel !== "undefined" ? storage.customerSpeedLevel : 0;
var customerSpeedCost = typeof storage.customerSpeedCost !== "undefined" ? storage.customerSpeedCost : 50;
var CUSTOMER_SPEED_MAX_LEVEL = 5;
var customerSpeedButton = game.addChild(LK.getAsset('upgradeButton', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: 500,
	y: 2360
}));
var customerSpeedText = new Text2('Customer Speed $' + customerSpeedCost, {
	size: 36,
	fill: 0xFFFFFF,
	wordWrap: true,
	wordWrapWidth: 260
});
customerSpeedText.anchor.set(0.5, 0.5);
customerSpeedText.x = 500;
customerSpeedText.y = 2360;
game.addChild(customerSpeedText);
function updateCustomerSpeedText() {
	if (customerSpeedLevel >= CUSTOMER_SPEED_MAX_LEVEL) {
		customerSpeedText.setText('Customer Speed (MAX)');
	} else {
		customerSpeedText.setText('Customer Speed $' + customerSpeedCost);
	}
}
customerSpeedButton.down = function () {
	if (customerSpeedLevel < CUSTOMER_SPEED_MAX_LEVEL && money >= customerSpeedCost) {
		money -= customerSpeedCost;
		customerSpeedLevel++;
		customerSpeedCost = customerSpeedCost * 2;
		// Only update current branch's customerSpeedLevel and derived stats
		if (branches[currentBranchIndex]) {
			branches[currentBranchIndex].customerSpeedLevel = customerSpeedLevel;
			branches[currentBranchIndex].customerSpeed = 3 * Math.pow(1.2, customerSpeedLevel);
		}
		// Update local variable from branch
		customerSpeed = branches[currentBranchIndex].customerSpeed;
		storage.customerSpeedLevel = customerSpeedLevel;
		storage.customerSpeedCost = customerSpeedCost;
		storage.money = money;
		LK.effects.flashObject(customerSpeedButton, 0x00FF00, 500);
		updateCustomerSpeedText();
	}
};
updateCustomerSpeedText();
// Add table button
var addTableButton = game.addChild(LK.getAsset('addTableButton', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: 1500,
	y: 2200
}));
var addTableCost = typeof storage.addTableCost !== "undefined" ? storage.addTableCost : 200 * (tableCount - 1 + 1); // 200, 400, 600, ...
var addTableText = new Text2('Add Table $' + addTableCost, {
	size: 36,
	fill: 0xFFFFFF,
	wordWrap: true,
	wordWrapWidth: 260
});
addTableText.anchor.set(0.5, 0.5);
addTableText.x = 1500;
addTableText.y = 2200;
game.addChild(addTableText);
function updateAddTableText() {
	addTableText.setText('Add Table $' + addTableCost);
}
addTableButton.down = function () {
	if (money >= addTableCost && tables.length < 20 && branches.length <= 5) {
		money -= addTableCost;
		createTable(tables.length);
		tableCount++;
		addTableCost = 200 * (tableCount - 1 + 1);
		storage.tableCount = tableCount;
		storage.addTableCost = addTableCost;
		storage.money = money;
		LK.effects.flashObject(addTableButton, 0x00FF00, 500);
		updateAddTableText();
	} else if (branches.length > 5) {
		LK.effects.flashObject(addTableButton, 0xFF0000, 500);
	}
};
updateAddTableText();
// --- New Restaurant Button ---
var branches = typeof storage.branches !== "undefined" ? storage.branches : [{
	name: "Main Branch",
	// Remove per-branch money, use only global money
	restaurantLevel: restaurantLevel,
	tableCount: tableCount,
	addTableCost: addTableCost,
	advertisementLevel: advertisementLevel,
	advertisementCost: advertisementCost,
	customerSpeedLevel: customerSpeedLevel,
	customerSpeedCost: customerSpeedCost,
	foodSales: foodSales.slice()
	// Add more per-branch state as needed
}];
var currentBranchIndex = typeof storage.currentBranchIndex !== "undefined" ? storage.currentBranchIndex : 0;
function saveBranches() {
	try {
		// Deep clone branches to avoid circular references and non-serializable objects
		var serializableBranches = [];
		for (var i = 0; i < branches.length; i++) {
			var b = branches[i];
			var branchCopy = {};
			for (var key in b) {
				// Only copy serializable properties (skip objects/functions)
				if (_typeof(b[key]) !== "object" && typeof b[key] !== "function") {
					branchCopy[key] = b[key];
				} else if (Array.isArray(b[key])) {
					// Shallow copy arrays (e.g. foodSales)
					branchCopy[key] = b[key].slice();
				}
			}
			// Always save upgradeSpeedLevel for background upgrades
			if (typeof b.upgradeSpeedLevel !== "undefined") {
				branchCopy.upgradeSpeedLevel = b.upgradeSpeedLevel;
			}
			serializableBranches.push(branchCopy);
		}
		storage.branches = serializableBranches;
		storage.currentBranchIndex = currentBranchIndex;
	} catch (e) {
		console.log("Error saving branches to storage:", e);
	}
}
function loadBranch(idx) {
	// Save current branch state before switching
	if (branches[currentBranchIndex]) {
		// Do not save per-branch money, only save other state
		branches[currentBranchIndex].restaurantLevel = restaurantLevel;
		branches[currentBranchIndex].tableCount = tableCount;
		branches[currentBranchIndex].addTableCost = addTableCost;
		branches[currentBranchIndex].advertisementLevel = advertisementLevel;
		branches[currentBranchIndex].advertisementCost = advertisementCost;
		branches[currentBranchIndex].customerSpeedLevel = customerSpeedLevel;
		branches[currentBranchIndex].customerSpeedCost = customerSpeedCost;
		branches[currentBranchIndex].foodSales = foodSales.slice();
		// Save waiterSpeed and cookingSpeed for this branch
		branches[currentBranchIndex].waiterSpeed = waiterSpeed;
		branches[currentBranchIndex].cookingSpeed = cookingSpeed;
		// Add more per-branch state as needed
	}
	// Load new branch state
	var b = branches[idx];
	if (b) {
		// Do not load per-branch money, always use global money
		restaurantLevel = b.restaurantLevel;
		tableCount = b.tableCount;
		addTableCost = b.addTableCost;
		advertisementLevel = b.advertisementLevel;
		advertisementCost = b.advertisementCost;
		customerSpeedLevel = b.customerSpeedLevel;
		customerSpeedCost = b.customerSpeedCost;
		upgradeSpeedLevel = typeof b.upgradeSpeedLevel !== "undefined" ? b.upgradeSpeedLevel : 0;
		for (var i = 0; i < foodSales.length; i++) foodSales[i] = b.foodSales[i] || 0;
		// Always restore all upgrade effects from the selected branch
		waiterSpeed = typeof b.waiterSpeed !== "undefined" ? b.waiterSpeed : 4;
		customerSpeed = typeof b.customerSpeed !== "undefined" ? b.customerSpeed : 3;
		cookingSpeed = typeof b.cookingSpeed !== "undefined" ? b.cookingSpeed : 180;
		// Reset tables, customers, etc.
		// Remove old tables
		for (var i = tables.length - 1; i >= 0; i--) {
			if (tables[i] && tables[i].destroy) tables[i].destroy();
			tables.splice(i, 1);
			orderTaken.splice(i, 1);
			tableReservations.splice(i, 1);
		}
		// Re-create tables
		for (var i = 0; i < tableCount; i++) {
			createTable(i);
		}
		// Remove all customers
		for (var i = customers.length - 1; i >= 0; i--) {
			if (customers[i] && customers[i].destroy) customers[i].destroy();
			customers.splice(i, 1);
		}
		// Remove waiter and reset active order
		if (typeof waiter !== "undefined" && waiter && waiter.destroy) {
			waiter.destroy();
		}
		waiter = game.addChild(new Waiter());
		// Spawn main waiter in front of the register (kasa)
		waiter.x = registerX - 120;
		waiter.y = registerY + 60;
		// Reset waiter's state
		waiter.state = 'idle';
		waiter.targetTable = null;
		waiter.hasFood = false;
		waiter.food = null;
		waiter.carryingFoodType = -1;
		waiter.targetTableIndex = -1;
		waiter.servingTableIndex = -1;
		waiter.hasDrink = false;
		waiter.drink = null;
		waiter.carryingDrinkType = -1;
		// Reset upgrades UI
		updateAddTableText();
		updateAdvertisementText();
		updateCustomerSpeedText();
		updateUpgradeText();
		// Update current branch name display
		if (typeof updateCurrentBranchNameText === "function") updateCurrentBranchNameText();
		// Reset last sold food info
		lastSoldFoodName = '';
		lastSoldFoodPrice = 0;
		// Save
		currentBranchIndex = idx;
		saveBranches();
	}
}
// --- New Restaurant Cost: 5000, 10000, 15000, ... (her yeni şube için 5000 artar) ---
var newRestaurantCost = 5000 * branches.length; // 1. şube: 5000, 2. şube: 10000, 3. şube: 15000, ...
if (branches.length === 0) newRestaurantCost = 5000; // fallback for 0 branch edge case
// New Restaurant button with background image
var newRestaurantButtonBg = game.addChild(LK.getAsset('newRestaurantButton', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: 1500,
	y: 2280
}));
var newRestaurantButton = new Text2('New Restaurant $' + newRestaurantCost, {
	size: 36,
	fill: 0xFFFFFF,
	wordWrap: true,
	wordWrapWidth: 260
});
newRestaurantButton.anchor.set(0.5, 0.5);
newRestaurantButton.x = 1500;
newRestaurantButton.y = 2280;
game.addChild(newRestaurantButton);
function updateNewRestaurantButton() {
	newRestaurantCost = 5000 * branches.length;
	if (branches.length === 0) newRestaurantCost = 5000;
	newRestaurantButton.setText('New Restaurant $' + newRestaurantCost);
}
newRestaurantButton.interactive = true;
newRestaurantButton.buttonMode = true;
newRestaurantButton.down = function () {
	if (branches.length >= 5) {
		LK.effects.flashObject(newRestaurantButtonBg, 0xFF0000, 500);
		return;
	}
	if (money >= newRestaurantCost) {
		money -= newRestaurantCost;
		// All upgrades start at 0 for new branch
		var newBranch = {
			name: "Branch " + (branches.length + 1),
			restaurantLevel: 1,
			tableCount: 2,
			addTableCost: 200,
			advertisementLevel: 0,
			advertisementCost: 100,
			customerSpeedLevel: 0,
			customerSpeedCost: 50,
			upgradeSpeedLevel: 0,
			waiterSpeed: 4,
			customerSpeed: 3,
			cookingSpeed: 180,
			foodSales: function () {
				var arr = [];
				for (var i = 0; i < foodTypes.length; i++) arr[i] = 0;
				return arr;
			}()
		};
		// Recalculate waiterSpeed for new branch (should be base speed)
		if (typeof waiterBaseSpeed === "undefined") {
			waiterBaseSpeed = 4;
		}
		waiterSpeed = typeof branches[currentBranchIndex] !== "undefined" && typeof branches[currentBranchIndex].waiterSpeed !== "undefined" ? branches[currentBranchIndex].waiterSpeed : waiterBaseSpeed;
		cookingSpeed = typeof branches[currentBranchIndex] !== "undefined" && typeof branches[currentBranchIndex].cookingSpeed !== "undefined" ? branches[currentBranchIndex].cookingSpeed : 180;
		branches.push(newBranch);
		saveBranches();
		updateNewRestaurantButton();
		LK.effects.flashObject(newRestaurantButtonBg, 0x00FF00, 500);
	}
};
updateNewRestaurantButton();
// --- Rivals Button (2 rows above register) ---
var rivalsButtonBg = game.addChild(LK.getAsset('branchesButton', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: 1024,
	y: registerY - 2 * 80 - 40 // 2 rows above register, 80px per row, 40px margin
}));
var rivalsButton = new Text2('Rivals', {
	size: 36,
	fill: 0xFFFFFF,
	wordWrap: true,
	wordWrapWidth: 260
});
rivalsButton.anchor.set(0.5, 0.5);
rivalsButton.x = 1024;
rivalsButton.y = registerY - 2 * 80 - 40;
game.addChild(rivalsButton);
rivalsButton.interactive = true;
rivalsButton.buttonMode = true;
// --- Rivals Panel ---
var rivalsPanel = null;
// Helper to hide panel (set visible = false)
function hideRivalsPanel() {
	if (rivalsPanel) {
		rivalsPanel.visible = false;
	}
}
var rivalCompanies = [{
	name: "Foodify",
	color: 0xff6347
}, {
	name: "QuickBite",
	color: 0x8b4513
}, {
	name: "Mealio",
	color: 0xffa500
}, {
	name: "Snackster",
	color: 0x32cd32
}, {
	name: "DineDash",
	color: 0xffd700
}, {
	name: "ChowNow",
	color: 0x6ad1e3
}, {
	name: "SliceBox",
	color: 0x8b0000
}, {
	name: "Lunchly",
	color: 0xf7b32b
}, {
	name: "Eatzy",
	color: 0xf4a259
}, {
	name: "Grubster",
	color: 0xf7e7ce
}];
// Persistent state for shares and prices
if (typeof storage.rivalShares === "undefined") {
	storage.rivalShares = [];
	for (var i = 0; i < rivalCompanies.length; i++) storage.rivalShares[i] = 0;
}
if (typeof storage.rivalPrices === "undefined") {
	storage.rivalPrices = [];
	for (var i = 0; i < rivalCompanies.length; i++) storage.rivalPrices[i] = 1000 + Math.floor(Math.random() * 500);
}
var rivalShares = storage.rivalShares;
var rivalPrices = storage.rivalPrices;
// Helper to save rivals state
function saveRivals() {
	storage.rivalShares = rivalShares.slice();
	storage.rivalPrices = rivalPrices.slice();
}
// Randomly update rival prices every 5 seconds
if (typeof game.rivalPriceTimer === "undefined") {
	game.rivalPriceTimer = 0;
}
game.updateRivalPrices = function () {
	// Each price can move randomly, but must stay between -10% and +20% of its initial value
	for (var i = 0; i < rivalPrices.length; i++) {
		// Store initial price for each company (if not already)
		if (!storage.rivalInitialPrices) storage.rivalInitialPrices = [];
		if (typeof storage.rivalInitialPrices[i] !== "number") {
			storage.rivalInitialPrices[i] = rivalPrices[i];
		}
		var initial = storage.rivalInitialPrices[i];
		var minPrice = Math.round(initial * 0.9);
		var maxPrice = Math.round(initial * 1.2);
		// Randomly move up or down by 1% to 5% of initial price
		var direction = Math.random() < 0.5 ? -1 : 1;
		var percent = 0.01 + Math.random() * 0.04; // 1% to 5%
		var delta = Math.round(initial * percent) * direction;
		var newPrice = rivalPrices[i] + delta;
		if (newPrice < minPrice) newPrice = minPrice;
		if (newPrice > maxPrice) newPrice = maxPrice;
		rivalPrices[i] = newPrice;
	}
	saveRivals();
};
game.rivalPriceTimer = 0;
// Show Rivals Panel
function showRivalsPanel() {
	if (rivalsPanel && rivalsPanel.parent) {
		rivalsPanel.parent.removeChild(rivalsPanel);
		rivalsPanel = null;
		return;
	}
	rivalsPanel = new Container();
	// Panel background
	// Use panel background, enlarged to fit all text and controls
	var rivalsPanelBgWidth = 1200;
	var rivalsPanelBgHeight = 1100;
	var panelBg = LK.getAsset('rivalsPanelBg', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 1024 + 240,
		y: 1366,
		width: rivalsPanelBgWidth,
		height: rivalsPanelBgHeight
	});
	panelBg.alpha = 0.98;
	rivalsPanel.addChild(panelBg);
	// Title
	var panelTitle = new Text2('Rivals', {
		size: 48,
		fill: 0xFFFFFF,
		font: "'GillSans',Tahoma"
	});
	panelTitle.anchor.set(0.5, 0);
	// Center title on new panel background
	panelTitle.x = 1024 + 240;
	panelTitle.y = 900;
	rivalsPanel.addChild(panelTitle);
	// List companies
	for (var i = 0; i < rivalCompanies.length; i++) {
		(function (idx) {
			var yBase = 1000 + idx * 90;
			// Company name
			var nameText = new Text2(rivalCompanies[idx].name, {
				size: 36,
				fill: rivalCompanies[idx].color,
				font: "'GillSans',Tahoma"
			});
			nameText.anchor.set(0, 0);
			// Align to left edge of new panel (panel x = 1024+240, width = 1200)
			nameText.x = 1024 + 240 - 600 + 40;
			nameText.y = yBase;
			rivalsPanel.addChild(nameText);
			// Price
			var priceText = new Text2('Price: $' + rivalPrices[idx], {
				size: 32,
				fill: 0xFFFFFF,
				font: "'GillSans',Tahoma"
			});
			priceText.anchor.set(0, 0);
			// Place price 300px to the right of name
			priceText.x = 1024 + 240 - 600 + 340;
			priceText.y = yBase;
			rivalsPanel.addChild(priceText);
			// Cost label under price
			// Calculate average cost per share as the average of actual prices paid for shares
			var avgCost = 0;
			if (!storage.rivalAvgCosts) storage.rivalAvgCosts = [];
			if (typeof storage.rivalAvgCosts[idx] === "number") {
				avgCost = storage.rivalAvgCosts[idx];
			} else {
				avgCost = 0;
			}
			var avgCostDisplay = '-';
			// Only show average cost if shares are owned and cost is > 0
			if (rivalShares[idx] > 0 && storage.rivalAvgCosts && typeof storage.rivalAvgCosts[idx] === "number" && storage.rivalAvgCosts[idx] > 0) {
				avgCostDisplay = '$' + Math.round(storage.rivalAvgCosts[idx]);
			}
			var costText = new Text2('Average: ' + avgCostDisplay, {
				size: 28,
				fill: 0xCCCCCC,
				font: "'GillSans',Tahoma"
			});
			costText.anchor.set(0, 0);
			// Place cost label directly under price (about 36px lower)
			costText.x = priceText.x;
			costText.y = priceText.y + 36;
			rivalsPanel.addChild(costText);
			// Shares owned
			var sharesText = new Text2('Shares: %' + rivalShares[idx] * 10, {
				size: 32,
				fill: 0xFFFF00,
				font: "'GillSans',Tahoma"
			});
			sharesText.anchor.set(0, 0);
			// Place shares 300px to the right of price
			sharesText.x = 1024 + 240 - 600 + 640;
			sharesText.y = yBase;
			rivalsPanel.addChild(sharesText);
			// Buy button
			var buyBtn = new Text2('Buy (10%)', {
				size: 28,
				fill: 0x00FF00,
				font: "'GillSans',Tahoma"
			});
			buyBtn.anchor.set(0.5, 0.5);
			// Place buy button 200px to the right of shares
			buyBtn.x = 1024 + 240 - 600 + 940;
			buyBtn.y = yBase + 20;
			buyBtn.interactive = true;
			buyBtn.buttonMode = true;
			buyBtn.down = function () {
				if (rivalShares[idx] < 10) {
					// Use the actual price paid for this share (not the rounded 10% cost)
					var sharePrice = rivalPrices[idx];
					var cost = Math.round(sharePrice * 0.1);
					if (money >= cost) {
						money -= cost;
						rivalShares[idx]++;
						// --- Average cost tracking ---
						if (!storage.rivalAvgCosts) storage.rivalAvgCosts = [];
						if (typeof storage.rivalAvgCosts[idx] !== "number") storage.rivalAvgCosts[idx] = 0;
						var prevShares = rivalShares[idx] - 1;
						var prevAvg = storage.rivalAvgCosts[idx];
						// Use the actual price paid for this share (sharePrice)
						if (prevShares > 0) {
							storage.rivalAvgCosts[idx] = (prevAvg * prevShares + sharePrice) / (prevShares + 1);
						} else {
							storage.rivalAvgCosts[idx] = sharePrice;
						}
						saveRivals();
						LK.effects.flashObject(buyBtn, 0x00FF00, 500);
						showRivalsPanel();
					} else {
						LK.effects.flashObject(buyBtn, 0xFF0000, 500);
					}
				} else {
					LK.effects.flashObject(buyBtn, 0xFF0000, 500);
				}
			};
			rivalsPanel.addChild(buyBtn);
			// Sell button
			var sellBtn = new Text2('Sell (10%)', {
				size: 28,
				fill: 0xFF0000,
				font: "'GillSans',Tahoma"
			});
			sellBtn.anchor.set(0.5, 0.5);
			// Place sell button 150px to the right of buy
			sellBtn.x = 1024 + 240 - 600 + 1090;
			sellBtn.y = yBase + 20;
			sellBtn.interactive = true;
			sellBtn.buttonMode = true;
			sellBtn.down = function () {
				if (rivalShares[idx] > 0) {
					var gain = Math.round(rivalPrices[idx] * 0.1);
					money += gain;
					rivalShares[idx]--;
					// --- Average cost tracking on sell ---
					if (!storage.rivalAvgCosts) storage.rivalAvgCosts = [];
					if (typeof storage.rivalAvgCosts[idx] !== "number") storage.rivalAvgCosts[idx] = 0;
					// If all shares sold, reset average cost to 0
					if (rivalShares[idx] === 0) {
						storage.rivalAvgCosts[idx] = 0;
					}
					saveRivals();
					LK.effects.flashObject(sellBtn, 0x00FF00, 500);
					showRivalsPanel();
				} else {
					LK.effects.flashObject(sellBtn, 0xFF0000, 500);
				}
			};
			rivalsPanel.addChild(sellBtn);
		})(i);
	}
	// Close button
	var closeBtn = new Text2('Close', {
		size: 36,
		fill: 0xFFFFFF
	});
	closeBtn.anchor.set(1, 0);
	// Place close button at top right of new panel background (1200px wide, centered at x=1024+240)
	closeBtn.x = 1024 + 240 + 600 - 24;
	closeBtn.y = 900 + 16;
	closeBtn.interactive = true;
	closeBtn.buttonMode = true;
	closeBtn.down = function () {
		if (rivalsPanel && rivalsPanel.parent) {
			rivalsPanel.parent.removeChild(rivalsPanel);
			rivalsPanel = null;
		}
	};
	rivalsPanel.addChild(closeBtn);
	rivalsPanel.visible = true;
	game.addChild(rivalsPanel);
}
rivalsButton.down = function () {
	showRivalsPanel();
};
// --- Branches Button ---
// Branches button with background image
var branchesButtonBg = game.addChild(LK.getAsset('branchesButton', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: 1500,
	y: 2360
}));
var branchesButton = new Text2('Branches', {
	size: 36,
	fill: 0xFFFFFF,
	wordWrap: true,
	wordWrapWidth: 260
});
branchesButton.anchor.set(0.5, 0.5);
branchesButton.x = 1500;
branchesButton.y = 2360;
game.addChild(branchesButton);
branchesButton.interactive = true;
branchesButton.buttonMode = true;
// --- Branches Panel ---
var branchesPanel = null;
// Helper to hide panel (set visible = false)
function hideBranchesPanel() {
	if (branchesPanel) {
		branchesPanel.visible = false;
	}
}
function showBranchesPanel() {
	if (branchesPanel && branchesPanel.parent) {
		branchesPanel.parent.removeChild(branchesPanel);
		branchesPanel = null;
		return;
	}
	branchesPanel = new Container();
	// Panel background
	// Use panel background at its native resolution, do not scale up
	var panelBg = LK.getAsset('branchesPanelBg', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 1024,
		y: 1366
	});
	panelBg.alpha = 0.98;
	branchesPanel.addChild(panelBg);
	// Title
	var panelTitle = new Text2('Branches', {
		size: 48,
		fill: 0xFFFFFF,
		font: "'GillSans',Tahoma"
	});
	panelTitle.anchor.set(0.5, 0);
	panelTitle.x = 1024;
	panelTitle.y = 900;
	branchesPanel.addChild(panelTitle);
	// List branches
	// --- Layout constants for alignment ---
	var panelCenterX = 1024;
	var panelStartY = 1000;
	var branchRowHeight = 170;
	var nameY = 0;
	var earningsY = 38;
	var upgradeY = 68;
	var btnY = 110;
	var spacerY = 150;
	var nameFontSize = 44;
	var earningsFontSize = 32;
	var upgradeFontSize = 26;
	var btnFontSize = 32;
	var nameColor = 0xFFFFFF;
	var earningsColor = 0xFFFF00;
	var upgradeColor = 0x00FFFF;
	var btnColor = 0xFFFFFF;
	var branchPanelWidth = 800;
	var leftColX = panelCenterX - branchPanelWidth / 2 + 40;
	var rightColX = panelCenterX + branchPanelWidth / 2 - 40;
	for (var i = 0; i < branches.length; i++) {
		(function (idx) {
			var b = branches[idx];
			var yBase = panelStartY + idx * branchRowHeight;
			var branchBtn = new Text2((idx === currentBranchIndex ? '▶ ' : '') + b.name, {
				size: nameFontSize,
				fill: nameColor,
				font: "'GillSans',Tahoma"
			});
			branchBtn.anchor.set(0.5, 0);
			branchBtn.x = panelCenterX;
			branchBtn.y = yBase + nameY;
			branchBtn.interactive = true;
			branchBtn.buttonMode = true;
			branchBtn.down = function () {
				if (idx !== currentBranchIndex) {
					loadBranch(idx);
					showBranchesPanel();
				}
			};
			branchesPanel.addChild(branchBtn);
			// --- Show per-branch total earnings under each branch ---
			var branchTotalEarnings = 0;
			if (b.foodSales && Array.isArray(b.foodSales)) {
				for (var fs = 0; fs < b.foodSales.length; fs++) {
					var price = typeof foodPrices !== "undefined" && foodPrices[fs] !== undefined ? foodPrices[fs] : 0;
					var branchPanelUpgradeLevel = typeof b.upgradeSpeedLevel !== "undefined" ? b.upgradeSpeedLevel : 0;
					var branchPanelEarningMultiplier = Math.pow(1.25, branchPanelUpgradeLevel);
					branchTotalEarnings += (b.foodSales[fs] || 0) * Math.round(price * branchPanelEarningMultiplier);
				}
			}
			var branchEarningsText = new Text2('Total Earnings: $' + branchTotalEarnings, {
				size: earningsFontSize,
				fill: earningsColor,
				font: "'GillSans',Tahoma"
			});
			branchEarningsText.anchor.set(0.5, 0);
			branchEarningsText.x = panelCenterX;
			branchEarningsText.y = yBase + earningsY;
			branchesPanel.addChild(branchEarningsText);
			// Show upgrade level for background earnings
			var branchUpgradeLevel = typeof b.upgradeSpeedLevel !== "undefined" ? b.upgradeSpeedLevel : 0;
			var branchUpgradeText = new Text2('Background Speed Upgrade: Level ' + branchUpgradeLevel, {
				size: upgradeFontSize,
				fill: upgradeColor,
				font: "'GillSans',Tahoma"
			});
			branchUpgradeText.anchor.set(0.5, 0);
			branchUpgradeText.x = panelCenterX;
			branchUpgradeText.y = yBase + upgradeY;
			branchesPanel.addChild(branchUpgradeText);
			// --- Upgrade button (except for main branch) ---
			if (idx > 0) {
				var upgradeLevel = typeof b.upgradeSpeedLevel !== "undefined" ? b.upgradeSpeedLevel : 0;
				var upgradeCost = 500 * (upgradeLevel + 1);
				var branchUpgradeBtnText = new Text2(upgradeLevel >= 5 ? "Upgrade (MAX)" : "Upgrade $" + upgradeCost, {
					size: btnFontSize,
					fill: btnColor,
					font: "'GillSans',Tahoma"
				});
				branchUpgradeBtnText.anchor.set(0.5, 0.5);
				branchUpgradeBtnText.x = panelCenterX;
				branchUpgradeBtnText.y = yBase + btnY;
				branchUpgradeBtnText.interactive = true;
				branchUpgradeBtnText.buttonMode = true;
				branchUpgradeBtnText.down = function () {
					var upgradeLevel = typeof b.upgradeSpeedLevel !== "undefined" ? b.upgradeSpeedLevel : 0;
					var upgradeCost = 500 * (upgradeLevel + 1);
					if (money >= upgradeCost && upgradeLevel < 5) {
						money -= upgradeCost;
						b.upgradeSpeedLevel = upgradeLevel + 1;
						saveBranches();
						LK.effects.flashObject(branchUpgradeBtnText, 0x00FF00, 500);
						showBranchesPanel();
					} else {
						LK.effects.flashObject(branchUpgradeBtnText, 0xFF0000, 500);
					}
				};
				branchesPanel.addChild(branchUpgradeBtnText);
				// --- Add white text row between branches (except after last) ---
				var spacerText = new Text2(' ', {
					size: 36,
					fill: 0xFFFFFF,
					font: "'GillSans',Tahoma"
				});
				spacerText.anchor.set(0.5, 0);
				spacerText.x = panelCenterX;
				spacerText.y = yBase + spacerY;
				branchesPanel.addChild(spacerText);
			}
		})(i);
	}
	// Close button
	var closeBtn = new Text2('Close', {
		size: 36,
		fill: 0xFFFFFF
	});
	// Anchor top right
	closeBtn.anchor.set(1, 0);
	// Place at top right of the panel background (800px wide, centered at x=1024)
	closeBtn.x = 1024 + 400 - 24; // 1024 + half width - margin
	closeBtn.y = 900 + 16; // panel top y + margin
	closeBtn.interactive = true;
	closeBtn.buttonMode = true;
	closeBtn.down = function () {
		if (branchesPanel && branchesPanel.parent) {
			branchesPanel.parent.removeChild(branchesPanel);
			branchesPanel = null;
		}
	};
	branchesPanel.addChild(closeBtn);
	branchesPanel.visible = true;
	game.addChild(branchesPanel);
}
branchesButton.down = function () {
	showBranchesPanel();
};
// Customer spawn timer
var customerSpawnTimer = 0;
// Game update
game.update = function () {
	// Update rival prices every 5 seconds
	game.rivalPriceTimer++;
	if (game.rivalPriceTimer >= 300) {
		game.updateRivalPrices();
		game.rivalPriceTimer = 0;
	}
	// Update all waiters (main and extra)
	if (typeof waiter !== "undefined" && waiter.update) waiter.update();
	if (typeof game !== "undefined" && game.extraWaiters) {
		for (var w = 0; w < game.extraWaiters.length; w++) {
			if (game.extraWaiters[w] && game.extraWaiters[w].update) game.extraWaiters[w].update();
		}
	}
	// Update all chefs (main and extra)
	if (typeof chef !== "undefined" && chef.update) chef.update();
	if (typeof game !== "undefined" && game.extraChefs) {
		for (var c = 0; c < game.extraChefs.length; c++) {
			if (game.extraChefs[c] && game.extraChefs[c].update) game.extraChefs[c].update();
		}
	}
	// --- Bank Credit/Deposit Processing ---
	// Use day counter for due checks
	if (bankCreditActive) {
		if (typeof bankCreditDueDay === "undefined" && typeof storage.bankCreditDueDay !== "undefined") {
			bankCreditDueDay = storage.bankCreditDueDay;
		}
		if (typeof bankCreditDueDay === "undefined") {
			// Fallback to tick-based if not set
			if (LK.ticks >= bankCreditDueTick) {
				var payAmount = Math.floor(bankCreditAmount * 1.10);
				if (money >= payAmount) {
					money -= payAmount;
					bankCreditActive = false;
					bankCreditAmount = 0;
					bankCreditDueTick = 0;
				} else {
					money = 0;
					bankCreditActive = false;
					bankCreditAmount = 0;
					bankCreditDueTick = 0;
				}
				storage.money = money;
			}
		} else if (day >= bankCreditDueDay) {
			var payAmount = Math.floor(bankCreditAmount * 1.10);
			if (money >= payAmount) {
				money -= payAmount;
				bankCreditActive = false;
				bankCreditAmount = 0;
				bankCreditDueTick = 0;
				bankCreditDueDay = undefined;
				storage.bankCreditDueDay = undefined;
			} else {
				money = 0;
				bankCreditActive = false;
				bankCreditAmount = 0;
				bankCreditDueTick = 0;
				bankCreditDueDay = undefined;
				storage.bankCreditDueDay = undefined;
			}
			storage.money = money;
		}
	}
	if (bankDepositActive) {
		if (typeof bankDepositDueDay === "undefined" && typeof storage.bankDepositDueDay !== "undefined") {
			bankDepositDueDay = storage.bankDepositDueDay;
		}
		if (typeof bankDepositDueDay === "undefined") {
			// Fallback to tick-based if not set
			if (LK.ticks >= bankDepositDueTick) {
				var returnAmount = Math.floor(bankDepositAmount * 1.20);
				money += returnAmount;
				bankDepositActive = false;
				bankDepositAmount = 0;
				bankDepositDueTick = 0;
				storage.money = money;
			}
		} else if (day >= bankDepositDueDay) {
			var returnAmount = Math.floor(bankDepositAmount * 1.20);
			money += returnAmount;
			bankDepositActive = false;
			bankDepositAmount = 0;
			bankDepositDueTick = 0;
			bankDepositDueDay = undefined;
			storage.bankDepositDueDay = undefined;
			storage.money = money;
		}
	}
	// Update money display
	moneyText.setText('Money: $' + money);
	// --- Day update ---
	if (typeof game.lastDayTick === "undefined") game.lastDayTick = 0;
	if (typeof game.lastDay === "undefined") game.lastDay = day;
	if (LK.ticks - game.lastDayTick >= 1440) {
		// 1440 ticks = 24 hours at 60fps
		day++;
		game.lastDayTick = LK.ticks;
		storage.day = day;
	}
	dayText.setText('Day: ' + day);
	// --- Live update for Rivals Panel ---
	if (rivalsPanel && rivalsPanel.visible) {
		// Find all children and update their text if they are price/cost/shares
		for (var i = 0; i < rivalCompanies.length; i++) {
			// Find priceText, costText, sharesText for this idx
			var yBase = 1000 + i * 90;
			for (var j = 0; j < rivalsPanel.children.length; j++) {
				var child = rivalsPanel.children[j];
				// Price
				if (child && child.x === 1024 + 240 - 600 + 340 && child.y === yBase) {
					child.setText('Price: $' + rivalPrices[i]);
				}
				// Cost
				if (child && child.x === 1024 + 240 - 600 + 340 && child.y === yBase + 36) {
					var avgCostDisplay = '-';
					if (rivalShares[i] > 0 && storage.rivalAvgCosts && typeof storage.rivalAvgCosts[i] === "number" && storage.rivalAvgCosts[i] > 0) {
						avgCostDisplay = '$' + Math.round(storage.rivalAvgCosts[i]);
					}
					child.setText('Average: ' + avgCostDisplay);
				}
				// Shares
				if (child && child.x === 1024 + 240 - 600 + 640 && child.y === yBase) {
					child.setText('Shares: %' + rivalShares[i] * 10);
				}
			}
		}
	}
	// --- Live update for Branches Panel ---
	// --- Live update for current branch name ---
	if (typeof updateCurrentBranchNameText === "function") updateCurrentBranchNameText();
	if (branchesPanel && branchesPanel.visible) {
		for (var i = 0; i < branches.length; i++) {
			var b = branches[i];
			var yBase = 1000 + i * 170;
			var branchTotalEarnings = 0;
			if (b.foodSales && Array.isArray(b.foodSales)) {
				for (var fs = 0; fs < b.foodSales.length; fs++) {
					var price = typeof foodPrices !== "undefined" && foodPrices[fs] !== undefined ? foodPrices[fs] : 0;
					var branchPanelUpgradeLevel = typeof b.upgradeSpeedLevel !== "undefined" ? b.upgradeSpeedLevel : 0;
					var branchPanelEarningMultiplier = Math.pow(1.25, branchPanelUpgradeLevel);
					branchTotalEarnings += (b.foodSales[fs] || 0) * Math.round(price * branchPanelEarningMultiplier);
				}
			}
			// Update earnings text and upgrade level text
			for (var j = 0; j < branchesPanel.children.length; j++) {
				var child = branchesPanel.children[j];
				// Earnings
				if (child && child.x === 1024 && child.y === yBase + 38) {
					child.setText('Total Earnings: $' + branchTotalEarnings);
				}
				// Upgrade level
				if (child && child.x === 1024 && child.y === yBase + 68) {
					var branchUpgradeLevel = typeof b.upgradeSpeedLevel !== "undefined" ? b.upgradeSpeedLevel : 0;
					child.setText('Background Speed Upgrade: Level ' + branchUpgradeLevel);
				}
				// Upgrade button (for non-main branches)
				if (i > 0 && child && child.x === 1024 && child.y === yBase + 110) {
					var upgradeLevel = typeof b.upgradeSpeedLevel !== "undefined" ? b.upgradeSpeedLevel : 0;
					var upgradeCost = 500 * (upgradeLevel + 1);
					child.setText(upgradeLevel >= 5 ? "Upgrade (MAX)" : "Upgrade $" + upgradeCost);
				}
				// Branch name (show selector arrow if current)
				if (child && child.x === 1024 && child.y === yBase) {
					child.setText((i === currentBranchIndex ? '▶ ' : '') + b.name);
					// Always force white color for branch name
					child.setStyle({
						fill: 0xFFFFFF
					});
				}
			}
		}
	}
	// Update Top 5 Most Sold Foods Panel
	// Find top 5 indices by sales count (only foodSales, not drinks)
	var topIndices = [];
	for (var i = 0; i < foodSales.length; i++) topIndices.push(i);
	topIndices.sort(function (a, b) {
		return foodSales[b] - foodSales[a];
	});
	for (var i = 0; i < 5; i++) {
		var idx = topIndices[i];
		if (foodSales[idx] > 0) {
			// Show food icon, count, and total earned
			// Create icon if not already present
			if (!top5TextLines[i].foodIcon) {
				var icon = LK.getAsset(foodImageIds[idx], {
					anchorX: 0.5,
					anchorY: 0.5,
					// Place icon to the left of the text, with a small margin
					x: top5TextLines[i].x - 50,
					y: top5TextLines[i].y + 20,
					width: 40,
					height: 40
				});
				game.addChild(icon);
				top5TextLines[i].foodIcon = icon;
			} else {
				// Update icon to correct food type and position
				top5TextLines[i].foodIcon.setAsset(foodImageIds[idx]);
				// Place icon to the left of the text, with a small margin
				top5TextLines[i].foodIcon.x = top5TextLines[i].x - 50;
				top5TextLines[i].foodIcon.y = top5TextLines[i].y + 20;
				top5TextLines[i].foodIcon.visible = true;
			}
			// Calculate total earned for this food, with 25% per-upgrade multiplicative bonus for active branch
			var activeBranchUpgradeLevel = typeof upgradeSpeedLevel !== "undefined" ? upgradeSpeedLevel : 0;
			var earningMultiplier = Math.pow(1.25, activeBranchUpgradeLevel);
			var totalEarned = foodSales[idx] * Math.round(foodPrices[idx] * earningMultiplier);
			top5TextLines[i].setText(i + 1 + '. ' + foodNames[idx] + ' - ' + foodSales[idx] + ' pcs  $' + totalEarned);
		} else {
			top5TextLines[i].setText('');
			// Hide icon if present
			if (top5TextLines[i].foodIcon) {
				top5TextLines[i].foodIcon.visible = false;
			}
		}
	}
	// Spawn customers
	customerSpawnTimer++;
	if (customerSpawnTimer > 300) {
		// Every 5 seconds
		customerSpawnTimer = 0;
		// Check if there are waiting customers first
		var hasWaitingCustomer = false;
		for (var j = 0; j < customers.length; j++) {
			if (customers[j].state === 'entering' && !customers[j].targetTable) {
				hasWaitingCustomer = true;
				// Set waiting customer's position to the exit (register) location
				customers[j].x = registerX;
				customers[j].y = registerY;
				// Try to assign a table to waiting customer
				for (var k = 0; k < tables.length; k++) {
					if (!tables[k].occupied && !tables[k].customer && !tableReservations[k]) {
						customers[j].targetTable = tables[k];
						customers[j].targetTableIndex = k;
						tableReservations[k] = true; // Reserve the table
						break;
					}
				}
				break;
			}
		}
		// Only spawn new customer if no one is waiting
		if (!hasWaitingCustomer) {
			// Başlangıçta müşteri sayısı 1, her reklam yükseltmesinde +2 müşteri
			var advLevel = typeof advertisementLevel !== "undefined" ? advertisementLevel : typeof storage.advertisementLevel !== "undefined" ? storage.advertisementLevel : 0;
			var spawnCount = 1 + 2 * advLevel;
			for (var spawnIdx = 0; spawnIdx < spawnCount; spawnIdx++) {
				var customer = game.addChild(new Customer());
				// Customers now enter from the exit (register) location
				customer.x = registerX;
				customer.y = registerY;
				customers.push(customer);
				// Try to find available table
				for (var i = 0; i < tables.length; i++) {
					if (!tables[i].occupied && !tables[i].customer && !tableReservations[i]) {
						customer.targetTable = tables[i];
						customer.targetTableIndex = i;
						tableReservations[i] = true; // Reserve the table
						break;
					}
				}
				// If no table available, customer will wait
			}
		}
	}
	// Simulate background sales for all branches (except current)
	// Background branches earn at 10% speed, but can be increased by upgrades
	if (LK.ticks % 60 === 0 && branches.length > 1) {
		for (var bidx = 0; bidx < branches.length; bidx++) {
			if (bidx === currentBranchIndex) continue;
			var b = branches[bidx];
			// Calculate background earning multiplier: base 0.1 (10%), each upgrade increases by 25% multiplicatively
			var branchUpgradeLevel = typeof b.upgradeSpeedLevel !== "undefined" ? b.upgradeSpeedLevel : 0;
			var backgroundMultiplier = 0.1 * Math.pow(1.25, branchUpgradeLevel);
			if (backgroundMultiplier > 1) backgroundMultiplier = 1;
			// Simulate a small number of sales per tick (e.g. 0-2 random sales)
			var salesCount = Math.floor(Math.random() * 3); // 0, 1, or 2
			// Apply multiplier (simulate fractional sales probabilistically)
			var effectiveSales = 0;
			for (var s = 0; s < salesCount; s++) {
				if (Math.random() < backgroundMultiplier) {
					effectiveSales++;
				}
			}
			for (var s = 0; s < effectiveSales; s++) {
				// Pick a random food type
				var foodIdx = Math.floor(Math.random() * foodTypes.length);
				if (!b.foodSales) b.foodSales = [];
				if (typeof b.foodSales[foodIdx] !== "number") b.foodSales[foodIdx] = 0;
				b.foodSales[foodIdx]++;
				// Add money to global money
				if (typeof foodPrices[foodIdx] === "number") {
					money += foodPrices[foodIdx];
				}
			}
		}
	}
	// Save periodically
	if (LK.ticks % 300 === 0) {
		storage.money = money;
	}
}; /**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/**** 
* Classes
****/ 
var Chef = Container.expand(function () {
	var self = Container.call(this);
	var chefGraphics = self.attachAsset('chef', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.cooking = false;
	self.cookTime = 0;
	self.currentFoodType = -1; // Track which food type is being cooked
	self.targetTableIndex = -1; // Track which table the food is for
	self.update = function () {
		if (chefHasOrder && !self.cooking && !foodReady) {
			self.cooking = true;
			self.cookTime = 0;
			self.currentFoodType = currentOrderFoodType; // Remember which food to cook
			self.targetTableIndex = currentOrderTableIndex; // Remember which table it's for
			// Log which table number's order is being cooked
			if (self.targetTableIndex >= 0 && self.targetTableIndex < tables.length) {
				console.log('Chef cooking for table number: ' + tables[self.targetTableIndex].tableNumber);
			}
			chefHasOrder = false;
		}
		if (self.cooking) {
			self.cookTime++;
			if (self.cookTime > cookingSpeed) {
				self.cooking = false;
				foodReady = true;
				// Pass cooked food info back through globals
				currentOrderFoodType = self.currentFoodType;
				currentOrderTableIndex = self.targetTableIndex;
				// Reset order taken for the specific table
				if (self.targetTableIndex >= 0 && self.targetTableIndex < orderTaken.length) {
					orderTaken[self.targetTableIndex] = false;
				}
			}
		}
	};
	return self;
});
var Customer = Container.expand(function () {
	var self = Container.call(this);
	// Pick a random customer image from 10 options
	var customerImageIds = ['customer1', 'customer2', 'customer3', 'customer4', 'customer5', 'customer6', 'customer7', 'customer8', 'customer9', 'customer10'];
	self.customerImageId = customerImageIds[Math.floor(Math.random() * customerImageIds.length)];
	var customerGraphics = self.attachAsset(self.customerImageId, {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.targetTable = null;
	self.targetTableIndex = -1; // Track which table index is reserved
	self.state = 'entering'; // entering, seated, waiting, eating, paying, leaving
	self.eatingTime = 0;
	self.waitTime = 0;
	self.foodType = Math.floor(Math.random() * foodTypes.length); // Random food type
	self.drinkType = Math.floor(Math.random() * drinkTypes.length); // Random drink type
	self.drinkImage = null; // Will hold the drink image above customer
	self.update = function () {
		if (self.state === 'entering') {
			if (self.targetTable) {
				// Only allow sitting if table is not occupied and no customer is still at the table
				if (!self.targetTable.occupied && !self.targetTable.customer) {
					var dx = self.targetTable.x - self.x;
					var dy = self.targetTable.y - self.y;
					var dist = Math.sqrt(dx * dx + dy * dy);
					if (dist > 5) {
						self.x += dx / dist * customerSpeed;
						self.y += dy / dist * customerSpeed;
					} else {
						self.state = 'seated';
						self.targetTable.occupied = true;
						self.targetTable.customer = self;
					}
				} else {
					// Table is not available, clear assignment and wait
					self.targetTable = null;
					self.targetTableIndex = -1;
				}
			} else {
				// Wait in line near exit (register) if no table available
				// Move downwards from the register position (registerY)
				if (self.y < registerY + 200) {
					self.y += customerSpeed;
				}
			}
		} else if (self.state === 'eating') {
			// Show food image above customer and shrink it as food is eaten
			if (!self.foodImage) {
				// Attach food image above customer head
				self.foodImage = self.attachAsset(foodImageIds[self.foodType], {
					anchorX: 0.5,
					anchorY: 1.0,
					x: 0,
					y: -customerGraphics.height / 2 - 10,
					scaleX: 1,
					scaleY: 1
				});
				self.foodImage.baseScale = 1;
			}
			// Show drink image above customer head (to the right of food)
			if (!self.drinkImage) {
				self.drinkImage = self.attachAsset(drinkImageIds[self.drinkType], {
					anchorX: 0.5,
					anchorY: 1.0,
					x: 30,
					// right of food
					y: -customerGraphics.height / 2 - 10,
					scaleX: 1,
					scaleY: 1
				});
				self.drinkImage.baseScale = 1;
			}
			self.eatingTime++;
			// Shrink food image as eating progresses
			if (self.foodImage) {
				var progress = Math.min(1, self.eatingTime / 180);
				var scale = 1 - 0.7 * progress; // Shrink to 30% of original size
				if (scale < 0.3) scale = 0.3;
				self.foodImage.scaleX = scale;
				self.foodImage.scaleY = scale;
			}
			// Shrink drink image as eating progresses
			if (self.drinkImage) {
				var progress = Math.min(1, self.eatingTime / 180);
				var scale = 1 - 0.7 * progress;
				if (scale < 0.3) scale = 0.3;
				self.drinkImage.scaleX = scale;
				self.drinkImage.scaleY = scale;
			}
			if (self.eatingTime > 180) {
				// 3 seconds at 60fps
				self.state = 'paying';
				// Remove food image above customer
				if (self.foodImage) {
					self.foodImage.destroy();
					self.foodImage = null;
				}
				// Remove drink image above customer
				if (self.drinkImage) {
					self.drinkImage.destroy();
					self.drinkImage = null;
				}
				if (self.targetTable) {
					self.targetTable.foodDelivered = false;
					if (self.targetTable.food) {
						self.targetTable.food.destroy();
						self.targetTable.food = null;
					}
					// Remove drink from table if present
					if (self.targetTable.drink) {
						self.targetTable.drink.destroy();
						self.targetTable.drink = null;
					}
				}
			}
		} else if (self.state === 'paying') {
			var dx = registerX - self.x;
			var dy = registerY - self.y;
			var dist = Math.sqrt(dx * dx + dy * dy);
			if (dist > 5) {
				self.x += dx / dist * customerSpeed;
				self.y += dy / dist * customerSpeed;
			} else {
				// Add money based on food type price, with 25% more per upgradeSpeedLevel (active branch)
				var activeBranchUpgradeLevel = typeof upgradeSpeedLevel !== "undefined" ? upgradeSpeedLevel : 0;
				var earningMultiplier = Math.pow(1.25, activeBranchUpgradeLevel);
				var foodEarn = Math.round(foodPrices[self.foodType] * earningMultiplier);
				var drinkEarn = drinkPrices[self.drinkType];
				money += foodEarn + drinkEarn;
				// Increment food sales count
				if (typeof foodSales !== "undefined" && self.foodType >= 0 && self.foodType < foodSales.length) {
					foodSales[self.foodType]++;
				}
				// (Do not increment drink sales for Top 5 panel!)
				// Optionally: you could track drink sales in a separate array if needed.
				self.state = 'leaving';
				if (self.targetTable) {
					self.targetTable.occupied = false;
					self.targetTable.customer = null;
					self.targetTable.orderPlaced = false;
					self.targetTable.orderedFoodType = -1; // Reset food type
				}
				// Clear reservation
				if (self.targetTableIndex >= 0) {
					tableReservations[self.targetTableIndex] = false;
				}
			}
		} else if (self.state === 'leaving') {
			self.y += customerSpeed;
			if (self.y > 2800) {
				// Remove food image above customer if still present
				if (self.foodImage) {
					self.foodImage.destroy();
					self.foodImage = null;
				}
				// Remove drink image above customer if still present
				if (self.drinkImage) {
					self.drinkImage.destroy();
					self.drinkImage = null;
				}
				// Clear reservation before destroying
				if (self.targetTableIndex >= 0) {
					tableReservations[self.targetTableIndex] = false;
				}
				// Clean up food on table if still present
				if (self.targetTable && self.targetTable.food) {
					self.targetTable.food.destroy();
					self.targetTable.food = null;
					self.targetTable.foodDelivered = false;
					self.targetTable.orderPlaced = false;
					self.targetTable.orderedFoodType = -1;
				}
				// Clean up drink on table if still present
				if (self.targetTable && self.targetTable.drink) {
					self.targetTable.drink.destroy();
					self.targetTable.drink = null;
				}
				self.destroy();
				var index = customers.indexOf(self);
				if (index > -1) customers.splice(index, 1);
			}
		} else if (self.state === 'seated') {
			self.waitTime++;
			if (self.waitTime > 120) {
				// 2 seconds
				self.targetTable.orderPlaced = true;
				self.targetTable.orderedFoodType = self.foodType; // Set the food type on table
				self.state = 'waiting';
			}
		}
	};
	return self;
});
var Table = Container.expand(function () {
	var self = Container.call(this);
	var tableGraphics = self.attachAsset('table', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	var chair = self.attachAsset('chair', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 0,
		y: 60
	});
	self.occupied = false;
	self.customer = null;
	self.food = null;
	self.drink = null; // Add drink property for table
	self.orderPlaced = false;
	self.foodDelivered = false;
	self.orderedFoodType = -1; // Store which food type was ordered
	self.tableNumber = -1; // Table number for tracking
	// Create table number text
	self.numberText = new Text2('', {
		size: 50,
		fill: 0xFFFFFF,
		font: "'GillSans',Impact,'Arial Black',Tahoma" // Remove bold font
	});
	self.numberText.anchor.set(0.5, 0.5);
	self.addChild(self.numberText);
	// Method to set table number
	self.setTableNumber = function (number) {
		self.tableNumber = number;
		self.numberText.setText('' + number);
	};
	return self;
});
var Waiter = Container.expand(function () {
	var self = Container.call(this);
	var waiterGraphics = self.attachAsset('waiter', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.state = 'idle'; // idle, goingToTable, goingToFridge, goingToKitchen, deliveringFood
	self.targetTable = null;
	self.hasFood = false;
	self.food = null;
	self.carryingFoodType = -1; // Track which food type waiter is carrying
	self.targetTableIndex = -1; // Track which table the order/food is for
	self.servingTableIndex = -1; // Track which table is being served until order is complete
	// --- New for drink delivery ---
	self.hasDrink = false;
	self.drink = null;
	self.carryingDrinkType = -1;
	self.update = function () {
		if (self.state === 'idle') {
			// If currently serving a table, check for ready food for that table
			if (self.servingTableIndex >= 0 && foodReady && !foodBeingDelivered && currentOrderTableIndex === self.servingTableIndex) {
				// If food is ready, but waiter hasn't picked up drink yet, go to fridge first
				if (!self.hasDrink) {
					self.state = 'goingToFridge';
				} else {
					self.state = 'goingToKitchen';
				}
			} else if (self.servingTableIndex < 0) {
				// Only take new orders when not serving any table
				// Find the first table with an order that is not being served
				var foundTable = false;
				for (var i = 0; i < tables.length; i++) {
					// Check if any other waiter is already serving this table
					var beingServed = false;
					// Check main waiter
					if (typeof waiter !== "undefined" && waiter !== self && waiter.servingTableIndex === i) beingServed = true;
					// Check extra waiters
					if (typeof game !== "undefined" && game.extraWaiters) {
						for (var w = 0; w < game.extraWaiters.length; w++) {
							if (game.extraWaiters[w] !== self && game.extraWaiters[w].servingTableIndex === i) {
								beingServed = true;
								break;
							}
						}
					}
					// Only serve table if not being served by any waiter, and not already assigned to another waiter
					if (tables[i].orderPlaced && !orderTaken[i] && !beingServed && (self.servingTableIndex === -1 || self.servingTableIndex !== i)) {
						self.state = 'goingToTable';
						self.targetTable = tables[i];
						self.targetTableIndex = i;
						self.servingTableIndex = i; // Start serving this table
						// Log which table number is being served
						console.log('Waiter serving table number: ' + tables[i].tableNumber);
						foundTable = true;
						break;
					}
				}
				// If no table found, remain idle, but do not allow waiter to be idle if there are waiting orders
				if (!foundTable) {
					// Check if there are any tables with orderPlaced and not being served
					for (var i = 0; i < tables.length; i++) {
						var beingServed = false;
						if (typeof waiter !== "undefined" && waiter !== self && waiter.servingTableIndex === i) beingServed = true;
						if (typeof game !== "undefined" && game.extraWaiters) {
							for (var w = 0; w < game.extraWaiters.length; w++) {
								if (game.extraWaiters[w] !== self && game.extraWaiters[w].servingTableIndex === i) {
									beingServed = true;
									break;
								}
							}
						}
						if (tables[i].orderPlaced && !orderTaken[i] && !beingServed) {
							// Assign this waiter to this table
							self.state = 'goingToTable';
							self.targetTable = tables[i];
							self.targetTableIndex = i;
							self.servingTableIndex = i;
							break;
						}
					}
				}
			}
		} else if (self.state === 'goingToTable') {
			var dx = self.targetTable.x - self.x;
			var dy = self.targetTable.y - self.y;
			var dist = Math.sqrt(dx * dx + dy * dy);
			if (dist > 5) {
				// Prevent overshooting: if step is larger than dist, snap to target
				var step = waiterSpeed;
				if (step > dist) step = dist;
				self.x += dx / dist * step;
				self.y += dy / dist * step;
			} else {
				orderTaken[self.targetTableIndex] = true;
				self.carryingFoodType = self.targetTable.orderedFoodType; // Remember the food type
				// --- New: Remember the drink type for this customer ---
				if (self.targetTable.customer && typeof self.targetTable.customer.drinkType === "number") {
					self.carryingDrinkType = self.targetTable.customer.drinkType;
				} else {
					self.carryingDrinkType = Math.floor(Math.random() * drinkTypes.length);
				}
				// Pass order details to chef through global variables
				currentOrderFoodType = self.carryingFoodType;
				currentOrderTableIndex = self.targetTableIndex;
				chefHasOrder = true;
				// --- New: Go to fridge first to pick up drink ---
				self.state = 'goingToFridge';
			}
		} else if (self.state === 'goingToFridge') {
			// Move to fridge position (fridge.x, fridge.y)
			var fridgeX = kitchenX - 2 * 400;
			var fridgeY = kitchenY;
			var dx = fridgeX - self.x;
			var dy = fridgeY - self.y;
			var dist = Math.sqrt(dx * dx + dy * dy);
			if (dist > 5) {
				// Prevent overshooting: if step is larger than dist, snap to target
				var step = waiterSpeed;
				if (step > dist) step = dist;
				self.x += dx / dist * step;
				self.y += dy / dist * step;
			} else {
				// Pick up drink (show drink image above waiter)
				if (!self.hasDrink) {
					if (self.drink) {
						self.drink.destroy();
						self.drink = null;
					}
					self.drink = self.attachAsset(drinkImageIds[self.carryingDrinkType], {
						anchorX: 0.5,
						anchorY: 1.0,
						x: 30,
						y: -70,
						scaleX: 1,
						scaleY: 1
					});
					self.hasDrink = true;
				}
				// After picking up drink, go to kitchen to pick up food
				self.state = 'goingToKitchen';
			}
		} else if (self.state === 'goingToKitchen') {
			var dx = kitchenX - self.x;
			var dy = kitchenY - self.y;
			var dist = Math.sqrt(dx * dx + dy * dy);
			if (dist > 5) {
				// Prevent overshooting: if step is larger than dist, snap to target
				var step = waiterSpeed;
				if (step > dist) step = dist;
				self.x += dx / dist * step;
				self.y += dy / dist * step;
			} else {
				// Check if food is ready for pickup
				if (foodReady && !self.hasFood && currentOrderTableIndex === self.servingTableIndex) {
					self.hasFood = true;
					foodReady = false;
					foodBeingDelivered = true;
					self.carryingFoodType = currentOrderFoodType; // Remember which food type
					self.targetTableIndex = currentOrderTableIndex; // Remember target table
					if (self.food) {
						self.food.destroy();
						self.food = null;
					}
					self.food = self.attachAsset(foodImageIds[self.carryingFoodType], {
						anchorX: 0.5,
						anchorY: 0.5,
						y: -40
					});
					// Deliver to the specific table that ordered this food
					if (self.targetTableIndex >= 0 && self.targetTableIndex < tables.length) {
						self.targetTable = tables[self.targetTableIndex];
						self.state = 'deliveringFood';
					}
				} else {
					// If not serving any table and not carrying food, reset to idle so waiter doesn't get stuck at kitchen
					if (!self.hasFood && (self.servingTableIndex === -1 || typeof self.servingTableIndex === "undefined")) {
						self.state = 'idle';
						self.targetTable = null;
						self.targetTableIndex = -1;
						// --- New: Drop drink if waiter was carrying one but order is cancelled ---
						if (self.hasDrink && self.drink) {
							self.drink.destroy();
							self.drink = null;
						}
						self.hasDrink = false;
						self.carryingDrinkType = -1;
					}
				}
				// Stay at kitchen waiting for food - don't go back to idle unless above
			}
		} else if (self.state === 'deliveringFood') {
			var dx = self.targetTable.x - self.x;
			var dy = self.targetTable.y - self.y;
			var dist = Math.sqrt(dx * dx + dy * dy);
			if (dist > 5) {
				// Prevent overshooting: if step is larger than dist, snap to target
				var step = waiterSpeed;
				if (step > dist) step = dist;
				self.x += dx / dist * step;
				self.y += dy / dist * step;
			} else {
				// Remove food and drink from waiter
				if (self.food) {
					self.food.destroy();
					self.food = null;
				}
				if (self.drink) {
					self.drink.destroy();
					self.drink = null;
				}
				self.hasFood = false;
				self.hasDrink = false;
				foodBeingDelivered = false;
				// Mark food delivered and reset order state so waiter doesn't deliver again
				self.targetTable.foodDelivered = true;
				// Place food on table
				self.targetTable.food = self.targetTable.attachAsset(foodImageIds[self.carryingFoodType], {
					anchorX: 0.5,
					anchorY: 0.5,
					y: -20
				});
				// Place drink on table (to the right of food)
				if (typeof self.carryingDrinkType === "number" && self.carryingDrinkType >= 0) {
					if (self.targetTable.drink) {
						self.targetTable.drink.destroy();
						self.targetTable.drink = null;
					}
					self.targetTable.drink = self.targetTable.attachAsset(drinkImageIds[self.carryingDrinkType], {
						anchorX: 0.5,
						anchorY: 0.5,
						x: 30,
						y: -20,
						scaleX: 1,
						scaleY: 1
					});
				}
				self.targetTable.orderPlaced = false; // Reset orderPlaced so waiter doesn't deliver again
				orderTaken[self.targetTableIndex] = false; // Reset orderTaken for this table
				self.targetTable.orderedFoodType = -1; // Reset food type for this table
				if (self.targetTable.customer) {
					// Remove any artificial wait before eating, customer starts eating immediately
					self.targetTable.customer.waitTime = 121; // >120 triggers eating state in Customer
					self.targetTable.customer.state = 'eating';
				}
				self.servingTableIndex = -1; // Order complete, can serve another table
				self.targetTable = null;
				self.carryingDrinkType = -1;
				// Always immediately pick up next waiting order if available
				var foundNextTable = false;
				for (var i = 0; i < tables.length; i++) {
					// Check if any other waiter is already serving this table
					var beingServed = false;
					if (typeof waiter !== "undefined" && waiter !== self && waiter.servingTableIndex === i) beingServed = true;
					if (typeof game !== "undefined" && game.extraWaiters) {
						for (var w = 0; w < game.extraWaiters.length; w++) {
							if (game.extraWaiters[w] !== self && game.extraWaiters[w].servingTableIndex === i) {
								beingServed = true;
								break;
							}
						}
					}
					// Only serve table if not being served by any waiter, and not already assigned to another waiter
					if (tables[i].orderPlaced && !orderTaken[i] && !beingServed && (self.servingTableIndex === -1 || self.servingTableIndex !== i)) {
						self.state = 'goingToTable';
						self.targetTable = tables[i];
						self.targetTableIndex = i;
						self.servingTableIndex = i; // Start serving this table
						console.log('Waiter immediately serving next table number: ' + tables[i].tableNumber);
						foundNextTable = true;
						break;
					}
				}
				if (!foundNextTable) {
					// If there are still waiting orders, do not allow waiter to be idle
					for (var i = 0; i < tables.length; i++) {
						var beingServed = false;
						if (typeof waiter !== "undefined" && waiter !== self && waiter.servingTableIndex === i) beingServed = true;
						if (typeof game !== "undefined" && game.extraWaiters) {
							for (var w = 0; w < game.extraWaiters.length; w++) {
								if (game.extraWaiters[w] !== self && game.extraWaiters[w].servingTableIndex === i) {
									beingServed = true;
									break;
								}
							}
						}
						if (tables[i].orderPlaced && !orderTaken[i] && !beingServed) {
							self.state = 'goingToTable';
							self.targetTable = tables[i];
							self.targetTableIndex = i;
							self.servingTableIndex = i;
							break;
						}
					}
					if (self.state !== 'goingToTable') {
						self.state = 'idle';
					}
				}
			}
		}
	};
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0xF5DEB3
});
/**** 
* Game Code
****/ 
// New assets for New Restaurant and Branches buttons
// Add main menu background image (covers full game area)
function _typeof(o) {
	"@babel/helpers - typeof";
	return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
		return typeof o;
	} : function (o) {
		return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
	}, _typeof(o);
}
// Use background image at its native resolution, do not scale up
var mainMenuBg = game.addChild(LK.getAsset('mainMenuBg', {
	anchorX: 0,
	anchorY: 0,
	x: 0,
	y: 0
}));
// Game variables
// Food image assets (replace with your own images as needed)
// For full reset, if storage.resetFlag is set, delete all storage keys
if (typeof storage.resetFlag !== "undefined" && storage.resetFlag === true) {
	// Delete all own keys except resetFlag itself (to avoid issues during iteration)
	var keysToDelete = [];
	for (var key in storage) {
		if (storage.hasOwnProperty(key) && key !== "resetFlag") {
			keysToDelete.push(key);
		}
	}
	for (var i = 0; i < keysToDelete.length; i++) {
		delete storage[keysToDelete[i]];
	}
	// Unset resetFlag after clearing
	delete storage.resetFlag;
}
// Start game from scratch on launch
var money = typeof storage.money !== "undefined" ? storage.money : 2000;
var restaurantLevel = storage.restaurantLevel || 1;
var tableCount = storage.tableCount || 2;
var tableReservations = []; // Track which tables are reserved by customers
// Food types
var foodTypes = ['pizza', 'burger', 'pasta', 'salad', 'soup', 'sushi', 'steak', 'curry', 'taco', 'dumpling'];
var foodNames = ['Pizza', 'Burger', 'Pasta', 'Salad', 'Soup', 'Sushi', 'Steak', 'Curry', 'Taco', 'Dumpling'];
var foodImageIds = ['food_pizza', 'food_burger', 'food_pasta', 'food_salad', 'food_soup', 'food_sushi', 'food_steak', 'food_curry', 'food_taco', 'food_dumpling'];
var foodColors = [0xff6347, 0x8b4513, 0xffa500, 0x32cd32, 0xffd700, 0x6ad1e3, 0x8b0000, 0xf7b32b, 0xf4a259, 0xf7e7ce];
// Food prices: multiples of 6, each next is 10% more (rounded to nearest integer)
var foodPrices = [6, 7, 8, 9, 10, 11, 12, 13, 14, 15]; // Will be set below
// Calculate food prices as 6, 6*1.1, 6*1.21, ... for all foodTypes (rounded)
foodPrices[0] = 6;
for (var i = 1; i < foodTypes.length; i++) {
	foodPrices[i] = Math.round(foodPrices[i - 1] * 1.1);
}
// --- Drink types, images, and prices ---
var drinkTypes = ['cola', 'fanta', 'sprite', 'ayran', 'soda', 'water', 'ice_tea', 'lemonade', 'orange_juice', 'coffee'];
var drinkNames = ['Cola', 'Fanta', 'Sprite', 'Ayran', 'Soda', 'Water', 'Ice Tea', 'Lemonade', 'Orange Juice', 'Coffee'];
var drinkImageIds = ['drink_cola', 'drink_fanta', 'drink_sprite', 'drink_ayran', 'drink_soda', 'drink_water', 'drink_icetea', 'drink_lemonade', 'drink_orangejuice', 'drink_coffee'];
// Register drink images as assets (dummy id for now, should be replaced with real image ids)
// Drink prices: 2, 4, 6, ..., 20
var drinkPrices = [];
for (var i = 0; i < drinkTypes.length; i++) {
	drinkPrices[i] = 2 * (i + 1);
}
// Speed variables (lower is faster)
var customerSpeed = 3;
var waiterBaseSpeed = 4; // Use this as the base for scaling waiterSpeed
var waiterSpeed = waiterBaseSpeed;
var cookingSpeed = 180; // 3 seconds at 60fps
// Game state
var tables = [];
var customers = [];
var orderTaken = [];
var chefHasOrder = false;
var foodReady = false;
var foodBeingDelivered = false;
var currentOrderFoodType = -1; // Track current order food type
var currentOrderTableIndex = -1; // Track current order table index
// Positions
var kitchenX = 1024;
var kitchenY = 400;
var registerX = 1024;
var registerY = 2400;
// UI Elements
var moneyText = new Text2('Money: $0', {
	size: 36,
	fill: 0xFFFFFF,
	font: "'GillSans',Tahoma" // Remove bold font
});
moneyText.anchor.set(0.5, 0);
LK.gui.top.addChild(moneyText);
// --- Day Counter ---
var day = typeof storage.day !== "undefined" ? storage.day : 1;
var dayText = new Text2('Day: 1', {
	size: 32,
	fill: 0xFFFF00,
	font: "'GillSans',Tahoma"
});
dayText.anchor.set(0.5, 0);
dayText.x = moneyText.x;
dayText.y = moneyText.y + moneyText.height + 4;
LK.gui.top.addChild(dayText);
// --- Current Branch Name Display (under day counter) ---
var currentBranchNameText = new Text2('', {
	size: 36,
	fill: 0xFFFFFF,
	font: "'GillSans',Tahoma"
});
currentBranchNameText.anchor.set(0.5, 0);
currentBranchNameText.x = moneyText.x;
currentBranchNameText.y = dayText.y + dayText.height + 4;
LK.gui.top.addChild(currentBranchNameText);
function updateCurrentBranchNameText() {
	if (branches && branches[currentBranchIndex] && branches[currentBranchIndex].name) {
		currentBranchNameText.setText(branches[currentBranchIndex].name);
	} else {
		currentBranchNameText.setText('');
	}
}
updateCurrentBranchNameText();
// --- Bank Button and Panel ---
// --- Music Toggle Icon/Button ---
// Use a simple text icon for music (🔊/🔇), or you can use an image asset if available
var musicOn = true;
var musicIcon = new Text2('🔊', {
	size: 36,
	fill: 0xFFFFFF,
	font: "'GillSans',Tahoma"
});
musicIcon.anchor.set(0, 0);
musicIcon.x = moneyText.x + moneyText.width + 40; // 1 row to the right of Money
musicIcon.y = moneyText.y;
musicIcon.interactive = true;
musicIcon.buttonMode = true;
LK.gui.top.addChild(musicIcon);
// Play music at start
LK.playMusic('Background', {
	loop: true
});
// Toggle music on icon press
musicIcon.down = function () {
	if (musicOn) {
		LK.stopMusic();
		musicIcon.setText('🔇');
		musicOn = false;
	} else {
		LK.playMusic('Background', {
			loop: true
		});
		musicIcon.setText('🔊');
		musicOn = true;
	}
};
// --- Bank Button and Panel ---
var bankButton = new Text2('Bank', {
	size: 36,
	fill: 0x00FFCC,
	font: "'GillSans',Tahoma"
});
bankButton.anchor.set(0, 0);
bankButton.x = musicIcon.x + musicIcon.width + 40; // 1 row to the right of music icon
bankButton.y = moneyText.y;
bankButton.interactive = true;
bankButton.buttonMode = true;
LK.gui.top.addChild(bankButton);
// --- How to Play Button and Panel ---
var howToPlayButton = new Text2('How to Play?', {
	size: 36,
	fill: 0x00CCFF,
	font: "'GillSans',Tahoma"
});
howToPlayButton.anchor.set(0, 0);
// Place 1 row to the right from Bank button (use width + margin)
howToPlayButton.x = bankButton.x + bankButton.width + 40;
howToPlayButton.y = bankButton.y;
howToPlayButton.interactive = true;
howToPlayButton.buttonMode = true;
LK.gui.top.addChild(howToPlayButton);
var howToPlayPanel = null;
function hideHowToPlayPanel() {
	if (howToPlayPanel && howToPlayPanel.parent) {
		howToPlayPanel.parent.removeChild(howToPlayPanel);
		howToPlayPanel = null;
	}
}
function showHowToPlayPanel() {
	hideHowToPlayPanel();
	howToPlayPanel = new Container();
	// Panel background (reuse branchesPanelBg, 800x1080)
	// Use panel background at its native resolution, do not scale up
	var panelBg = LK.getAsset('branchesPanelBg', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 1024,
		y: 1366
	});
	panelBg.alpha = 0.98;
	howToPlayPanel.addChild(panelBg);
	// Title
	var panelTitle = new Text2('How to Play', {
		size: 54,
		fill: 0x00CCFF,
		font: "'GillSans',Tahoma"
	});
	panelTitle.anchor.set(0.5, 0);
	panelTitle.x = 1024;
	panelTitle.y = 900;
	howToPlayPanel.addChild(panelTitle);
	// Info text (multi-line, word wrap)
	var infoText = new Text2("Welcome to Restaurant Tycoon!\n\n" + "• Customers will arrive and sit at available tables.\n" + "• Waiters take orders, pick up food and drinks, and deliver them to tables.\n" + "• Earn money by serving food and drinks. Upgrade your restaurant for faster service and more customers.\n" + "• Use the Bank to take credits or open deposits for extra money.\n" + "• Open new branches to expand your business. Each branch has its own upgrades.\n" + "• Compete with rival companies and buy shares to increase your wealth.\n\n" + "Tip: Upgrade your speed and advertisement to serve more customers and earn more money!\n\n" + "Good luck and have fun!", {
		size: 32,
		fill: 0xFFFFFF,
		wordWrap: true,
		wordWrapWidth: 700,
		font: "'GillSans',Tahoma"
	});
	infoText.anchor.set(0.5, 0);
	infoText.x = 1024;
	infoText.y = 980;
	howToPlayPanel.addChild(infoText);
	// Close button
	var closeBtn = new Text2('Close', {
		size: 36,
		fill: 0xFFFFFF
	});
	closeBtn.anchor.set(1, 0);
	closeBtn.x = 1024 + 400 - 24;
	closeBtn.y = 900 + 16;
	closeBtn.interactive = true;
	closeBtn.buttonMode = true;
	closeBtn.down = function () {
		hideHowToPlayPanel();
	};
	howToPlayPanel.addChild(closeBtn);
	howToPlayPanel.visible = true;
	game.addChild(howToPlayPanel);
}
howToPlayButton.down = function () {
	showHowToPlayPanel();
};
var bankPanel = null;
var bankCreditActive = false;
var bankCreditAmount = 0;
var bankCreditDueTick = 0;
var bankDepositActive = false;
var bankDepositAmount = 0;
var bankDepositDueTick = 0;
// Helper to close bank panel
function hideBankPanel() {
	if (bankPanel && bankPanel.parent) {
		bankPanel.parent.removeChild(bankPanel);
		bankPanel = null;
	}
}
// Show Bank Panel
function showBankPanel() {
	hideBankPanel();
	bankPanel = new Container();
	// 50% scale up factor for more space
	var scaleFactor = 1.5;
	// Panel background (800x1080 -> 1200x1620) and shift 20% to the right
	var bankPanelBgWidth = 1200; // 800 * 1.5
	var bankPanelBgHeight = 1620; // 1080 * 1.5
	var bankPanelBgX = 1024 + (bankPanelBgWidth - 800 * scaleFactor) / 2; // 20% to the right, keep similar logic
	// Use panel background at its native resolution, do not scale up
	var panelBg = LK.getAsset('branchesPanelBg', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: bankPanelBgX,
		y: 1366,
		width: bankPanelBgWidth,
		height: bankPanelBgHeight
	});
	panelBg.alpha = 0.98;
	bankPanel.addChild(panelBg);
	// New panel width and alignment references
	var panelWidth = bankPanelBgWidth;
	var panelHeight = bankPanelBgHeight;
	var leftX = bankPanelBgX - panelWidth / 2 + 80 * scaleFactor;
	var rightX = bankPanelBgX + 80 * scaleFactor;
	// Move all Bank panel content up by 2 rows (180px)
	var sectionY = 950 * scaleFactor / 1.25 + 20 * scaleFactor - 180; // Shift up by 180px (2 rows)
	// Title
	var panelTitle = new Text2('Bank', {
		size: 48 * scaleFactor,
		fill: 0x00FFCC,
		font: "'GillSans',Tahoma"
	});
	panelTitle.anchor.set(0.5, 0);
	panelTitle.x = 1024;
	panelTitle.y = sectionY;
	bankPanel.addChild(panelTitle);
	// --- Vertically stacked Credit and Deposit sections inside the panel ---
	// Start Y for first section (Credit)
	var sectionStartY = sectionY + 90 * scaleFactor;
	// --- Credit Section ---
	var creditTitle = new Text2('Credit', {
		size: 36 * scaleFactor,
		fill: 0xFFFFFF,
		font: "'GillSans',Tahoma"
	});
	creditTitle.anchor.set(0, 0);
	creditTitle.x = leftX;
	creditTitle.y = sectionStartY;
	bankPanel.addChild(creditTitle);
	var canTakeCredit = !bankCreditActive;
	var creditOffer = Math.floor(money * 0.2);
	var creditInfoLine1, creditInfoLine2;
	if (canTakeCredit) {
		creditInfoLine1 = 'Take a credit of $' + creditOffer;
		creditInfoLine2 = '(10 days, 10% interest)';
	} else {
		creditInfoLine1 = 'Active Credit: $' + bankCreditAmount;
		var creditDueDay = typeof bankCreditDueDay !== "undefined" ? bankCreditDueDay : day + 10;
		var daysLeft = Math.max(0, creditDueDay - day);
		creditInfoLine2 = '(Due in ' + daysLeft + ' days)';
	}
	var creditText1 = new Text2(creditInfoLine1, {
		size: 28 * scaleFactor,
		fill: 0xFFFFFF,
		font: "'GillSans',Tahoma"
	});
	creditText1.anchor.set(0, 0);
	creditText1.x = leftX;
	creditText1.y = creditTitle.y + 60 * scaleFactor;
	bankPanel.addChild(creditText1);
	var creditText2 = new Text2(creditInfoLine2, {
		size: 24 * scaleFactor,
		fill: 0xCCCCCC,
		font: "'GillSans',Tahoma"
	});
	creditText2.anchor.set(0, 0);
	creditText2.x = leftX;
	creditText2.y = creditText1.y + creditText1.height + 2 * scaleFactor;
	bankPanel.addChild(creditText2);
	var creditBtn = new Text2('Take Credit', {
		size: 32 * scaleFactor,
		fill: canTakeCredit ? 0x00FF00 : 0x888888,
		font: "'GillSans',Tahoma"
	});
	creditBtn.anchor.set(0, 0);
	creditBtn.x = leftX;
	creditBtn.y = creditText2.y + creditText2.height + 12 * scaleFactor;
	creditBtn.interactive = canTakeCredit;
	creditBtn.buttonMode = canTakeCredit;
	creditBtn.down = function () {
		if (!bankCreditActive) {
			bankCreditActive = true;
			bankCreditAmount = creditOffer;
			bankCreditDueDay = day + 10;
			bankCreditDueTick = LK.ticks + 10 * 60 * 60 * 24;
			money += bankCreditAmount;
			storage.money = money;
			storage.bankCreditDueDay = bankCreditDueDay;
			hideBankPanel();
			showBankPanel();
		}
	};
	bankPanel.addChild(creditBtn);
	var payableAmount = 0;
	if (bankCreditActive) {
		payableAmount = Math.floor(bankCreditAmount * 1.10);
	} else {
		payableAmount = Math.floor(creditOffer * 1.10);
	}
	var payableText = new Text2("Payable: $" + payableAmount, {
		size: 24 * scaleFactor,
		fill: 0xFF8888,
		font: "'GillSans',Tahoma"
	});
	payableText.anchor.set(0, 0);
	payableText.x = creditBtn.x + creditBtn.width + 32 * scaleFactor;
	payableText.y = creditBtn.y + 4 * scaleFactor;
	bankPanel.addChild(payableText);
	var infoTextCredit = new Text2("You can take a credit for 10 days at 10% interest (max 20% of your current money).", {
		size: 24 * scaleFactor,
		fill: 0xFFFFCC,
		wordWrap: true,
		wordWrapWidth: 400 * scaleFactor,
		font: "'GillSans',Tahoma"
	});
	infoTextCredit.anchor.set(0, 0);
	infoTextCredit.x = leftX;
	infoTextCredit.y = creditBtn.y + creditBtn.height + 12 * scaleFactor;
	bankPanel.addChild(infoTextCredit);
	// --- Deposit Section (stacked below Credit) ---
	var depositSectionStartY = infoTextCredit.y + infoTextCredit.height + 48 * scaleFactor;
	var depositTitle = new Text2('Deposit', {
		size: 36 * scaleFactor,
		fill: 0xFFFFFF,
		font: "'GillSans',Tahoma"
	});
	depositTitle.anchor.set(0, 0);
	depositTitle.x = leftX;
	depositTitle.y = depositSectionStartY;
	bankPanel.addChild(depositTitle);
	var canDeposit = !bankDepositActive && money > 0;
	var depositOffer = Math.floor(money * 0.5);
	var depositInfoLine1, depositInfoLine2;
	if (bankDepositActive) {
		depositInfoLine1 = 'Active Deposit: $' + bankDepositAmount;
		var depositDueDay = typeof bankDepositDueDay !== "undefined" ? bankDepositDueDay : day + 10;
		var depositDaysLeft = Math.max(0, depositDueDay - day);
		depositInfoLine2 = '(Due in ' + depositDaysLeft + ' days)';
	} else {
		depositInfoLine1 = 'Open a deposit up to $' + depositOffer;
		depositInfoLine2 = '(10 days, 20% interest)';
	}
	var depositText1 = new Text2(depositInfoLine1, {
		size: 28 * scaleFactor,
		fill: 0xFFFFFF,
		font: "'GillSans',Tahoma"
	});
	depositText1.anchor.set(0, 0);
	depositText1.x = leftX;
	depositText1.y = depositTitle.y + 60 * scaleFactor;
	bankPanel.addChild(depositText1);
	var depositText2 = new Text2(depositInfoLine2, {
		size: 24 * scaleFactor,
		fill: 0xCCCCCC,
		font: "'GillSans',Tahoma"
	});
	depositText2.anchor.set(0, 0);
	depositText2.x = leftX;
	depositText2.y = depositText1.y + depositText1.height + 2 * scaleFactor;
	bankPanel.addChild(depositText2);
	var depositBtn = new Text2('Open Deposit', {
		size: 32 * scaleFactor,
		fill: canDeposit ? 0x00FF00 : 0x888888,
		font: "'GillSans',Tahoma"
	});
	depositBtn.anchor.set(0, 0);
	depositBtn.x = leftX;
	depositBtn.y = depositText2.y + depositText2.height + 12 * scaleFactor;
	depositBtn.interactive = canDeposit;
	depositBtn.buttonMode = canDeposit;
	depositBtn.down = function () {
		if (!bankDepositActive && money > 0) {
			bankDepositActive = true;
			bankDepositAmount = depositOffer;
			bankDepositDueDay = day + 10;
			bankDepositDueTick = LK.ticks + 10 * 60 * 60 * 24;
			money -= bankDepositAmount;
			storage.money = money;
			storage.bankDepositDueDay = bankDepositDueDay;
			hideBankPanel();
			showBankPanel();
		}
	};
	bankPanel.addChild(depositBtn);
	var receivableAmount = 0;
	if (bankDepositActive) {
		receivableAmount = Math.floor(bankDepositAmount * 1.20);
	} else {
		receivableAmount = Math.floor(depositOffer * 1.20);
	}
	var receivableText = new Text2("Receivable: $" + receivableAmount, {
		size: 24 * scaleFactor,
		fill: 0x88FF88,
		font: "'GillSans',Tahoma"
	});
	receivableText.anchor.set(0, 0);
	receivableText.x = depositBtn.x + depositBtn.width + 32 * scaleFactor;
	receivableText.y = depositBtn.y + 4 * scaleFactor;
	bankPanel.addChild(receivableText);
	var infoTextDeposit = new Text2("You can open a deposit for 10 days at 20% interest (max 50% of your current money).", {
		size: 24 * scaleFactor,
		fill: 0xFFFFCC,
		wordWrap: true,
		wordWrapWidth: 400 * scaleFactor,
		font: "'GillSans',Tahoma"
	});
	infoTextDeposit.anchor.set(0, 0);
	infoTextDeposit.x = leftX;
	infoTextDeposit.y = depositBtn.y + depositBtn.height + 12 * scaleFactor;
	bankPanel.addChild(infoTextDeposit);
	// General info text at the bottom
	var infoTextGeneral = new Text2("You can only have one active credit and one active deposit at a time.", {
		size: 22 * scaleFactor,
		fill: 0xFFFFCC,
		wordWrap: true,
		wordWrapWidth: 700 * scaleFactor,
		font: "'GillSans',Tahoma"
	});
	infoTextGeneral.anchor.set(0.5, 0);
	// Move up slightly to ensure it fits inside the panel and doesn't overlap
	infoTextGeneral.x = 1024;
	infoTextGeneral.y = sectionY + panelHeight - 120 * scaleFactor;
	bankPanel.addChild(infoTextGeneral);
	// Close button
	var closeBtn = new Text2('Close', {
		size: 36 * scaleFactor,
		fill: 0xFFFFFF
	});
	closeBtn.anchor.set(1, 0);
	closeBtn.x = 1024 + panelWidth / 2 - 32 * scaleFactor;
	closeBtn.y = sectionY + 16 * scaleFactor;
	closeBtn.interactive = true;
	closeBtn.buttonMode = true;
	closeBtn.down = function () {
		hideBankPanel();
	};
	bankPanel.addChild(closeBtn);
	bankPanel.visible = true;
	game.addChild(bankPanel);
}
bankButton.down = function () {
	showBankPanel();
};
// --- Reset Game Button (to the left of the coin) ---
var resetButton = new Text2('Reset', {
	size: 48,
	fill: 0xFFFFFF,
	wordWrap: true,
	wordWrapWidth: 140
});
resetButton.anchor.set(1, 0); // right-top anchor
resetButton.x = moneyText.x - 180 - 2048 * 0.05; // Move 5% of screen width further left
resetButton.y = moneyText.y + 8; // Align vertically with moneyText
resetButton.interactive = true;
resetButton.buttonMode = true;
resetButton.down = function () {
	// Yeniden başlatınca storage.resetFlag ayarla, sonraki açılışta tüm storage silinsin
	storage.resetFlag = true;
	LK.showGameOver(); // This will reset the game state
};
LK.gui.top.addChild(resetButton);
// --- Top 5 Most Sold Foods Panel (below Son Satış) ---
var foodSales = [];
for (var i = 0; i < foodTypes.length; i++) {
	foodSales[i] = 0;
}
// Panel background image for Top 5 Most Sold Foods
var top5PanelBg = LK.getAsset('top5PanelBg', {
	anchorX: 1,
	anchorY: 0,
	x: 2048,
	y: 120,
	width: 500,
	height: 385 // 350 * 1.1 = 385
});
top5PanelBg.alpha = 0.92;
game.addChild(top5PanelBg);
var top5Title = new Text2('TOP 5', {
	size: 40,
	fill: 0xFFFFFF,
	font: "'GillSans',Tahoma" // Remove bold font
});
// Anchor left-top
top5Title.anchor.set(0, 0);
// Align to left edge of the panel (panel x = 2048, width = 500)
top5Title.x = 2048 - 500 + 20;
top5Title.y = 140;
game.addChild(top5Title);
var top5TextLines = [];
for (var i = 0; i < 5; i++) {
	var txt = new Text2('', {
		size: 36,
		fill: 0xFFFFFF,
		font: "'GillSans',Tahoma" // Remove bold font
	});
	// Anchor left-top
	txt.anchor.set(0, 0);
	// Align to left edge of the panel (panel x = 2048, width = 500)
	txt.x = 2048 - 500 + 20;
	txt.y = 200 + i * 55;
	game.addChild(txt);
	top5TextLines.push(txt);
}
// Add fridge image to the left of the kitchen, 2 satır (columns) left
var fridge = game.addChild(LK.getAsset('fridge', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: kitchenX - 2 * 400,
	// 2 kitchen widths left
	y: kitchenY
}));
// Create kitchen
var kitchen = game.addChild(LK.getAsset('kitchen', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: kitchenX,
	y: kitchenY
}));
// Create register
var register = game.addChild(LK.getAsset('register', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: registerX,
	y: registerY
}));
// Create chef
var chef = game.addChild(new Chef());
chef.x = kitchenX;
chef.y = kitchenY;
// Create waiter
var waiter = game.addChild(new Waiter());
// Spawn main waiter in front of the register (kasa)
waiter.x = registerX - 120;
waiter.y = registerY + 60;
// Always initialize extraWaiters as an array so new waiters can be added and updated
game.extraWaiters = [];
// Create initial tables
function createTable(index) {
	var table = game.addChild(new Table());
	// Arrange tables in rows of 5
	var row = Math.floor(index / 5);
	var col = index % 5;
	table.x = 300 + col * 300;
	table.y = 800 + row * 300;
	table.setTableNumber(index + 1); // Set table number (1-based)
	tables.push(table);
	orderTaken.push(false);
	tableReservations.push(false); // Initialize reservation status
}
for (var i = 0; i < tableCount; i++) {
	createTable(i);
}
// Upgrade speed button
var upgradeButton = game.addChild(LK.getAsset('upgradeButton', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: 500,
	y: 2200
}));
var upgradeText = new Text2('Upgrade Speed $50', {
	size: 36,
	fill: 0xFFFFFF,
	wordWrap: true,
	wordWrapWidth: 260
});
upgradeText.anchor.set(0.5, 0.5);
upgradeText.x = 500;
upgradeText.y = 2200;
game.addChild(upgradeText);
// Track upgrade cost and max level
var upgradeSpeedLevel = typeof storage.upgradeSpeedLevel !== "undefined" ? storage.upgradeSpeedLevel : 0;
var upgradeSpeedCost = typeof storage.upgradeSpeedCost !== "undefined" ? storage.upgradeSpeedCost : 50;
var UPGRADE_SPEED_MAX_LEVEL = 10;
function updateUpgradeText() {
	if (upgradeSpeedLevel >= UPGRADE_SPEED_MAX_LEVEL) {
		upgradeText.setText('Upgrade Speed (MAX)');
	} else {
		upgradeText.setText('Upgrade Speed $' + upgradeSpeedCost);
	}
}
upgradeButton.down = function () {
	if (upgradeSpeedLevel < UPGRADE_SPEED_MAX_LEVEL && money >= upgradeSpeedCost) {
		money -= upgradeSpeedCost;
		upgradeSpeedLevel++;
		upgradeSpeedCost = Math.floor(upgradeSpeedCost * 1.5);
		restaurantLevel++;
		// Only update current branch's upgradeSpeedLevel and derived stats
		if (branches[currentBranchIndex]) {
			branches[currentBranchIndex].upgradeSpeedLevel = upgradeSpeedLevel;
			// waiterSpeed: Each level increases speed by 50% (waiterSpeed = base * 1.5^level), max 20
			if (typeof waiterBaseSpeed === "undefined") {
				waiterBaseSpeed = 4;
			}
			branches[currentBranchIndex].waiterSpeed = Math.min(20, waiterBaseSpeed * Math.pow(1.5, upgradeSpeedLevel));
			if (branches[currentBranchIndex].waiterSpeed > 20) branches[currentBranchIndex].waiterSpeed = 20;
			branches[currentBranchIndex].cookingSpeed = Math.max(60, 180 - 20 * upgradeSpeedLevel);
			// Save waiterSpeed and cookingSpeed to branch after upgrade
			waiterSpeed = branches[currentBranchIndex].waiterSpeed;
			cookingSpeed = branches[currentBranchIndex].cookingSpeed;
			branches[currentBranchIndex].waiterSpeed = waiterSpeed;
			branches[currentBranchIndex].cookingSpeed = cookingSpeed;
		}
		// Update local variables from branch
		waiterSpeed = branches[currentBranchIndex].waiterSpeed;
		cookingSpeed = branches[currentBranchIndex].cookingSpeed;
		storage.restaurantLevel = restaurantLevel;
		storage.money = money;
		storage.upgradeSpeedLevel = upgradeSpeedLevel;
		storage.upgradeSpeedCost = upgradeSpeedCost;
		LK.effects.flashObject(upgradeButton, 0x00FF00, 500);
		updateUpgradeText();
	}
};
updateUpgradeText();
// --- Advertisement Upgrade Button below Upgrade Speed ---
var advertisementLevel = typeof storage.advertisementLevel !== "undefined" ? storage.advertisementLevel : 0;
var advertisementButton = game.addChild(LK.getAsset('upgradeButton', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: 500,
	y: 2280
}));
var advertisementText = new Text2('Advertisement $100', {
	size: 36,
	fill: 0xFFFFFF,
	wordWrap: true,
	wordWrapWidth: 260
});
advertisementText.anchor.set(0.5, 0.5);
advertisementText.x = 500;
advertisementText.y = 2280;
game.addChild(advertisementText);
// Track advertisement upgrade cost, default to 100 * (advertisementLevel+1)
var advertisementCost = typeof storage.advertisementCost !== "undefined" ? storage.advertisementCost : 100 * (advertisementLevel + 1);
function updateAdvertisementText() {
	if (advertisementLevel >= ADVERTISEMENT_MAX_LEVEL) {
		advertisementText.setText('Advertisement (MAX)');
	} else {
		advertisementText.setText('Advertisement $' + advertisementCost);
	}
}
var ADVERTISEMENT_MAX_LEVEL = 5;
advertisementButton.down = function () {
	if (advertisementLevel >= ADVERTISEMENT_MAX_LEVEL) {
		LK.effects.flashObject(advertisementButton, 0xFF0000, 500);
		return;
	}
	if (money >= advertisementCost) {
		money -= advertisementCost;
		advertisementLevel++;
		advertisementCost = 100 * (advertisementLevel + 1);
		storage.advertisementLevel = advertisementLevel;
		storage.advertisementCost = advertisementCost;
		storage.money = money;
		LK.effects.flashObject(advertisementButton, 0x00FF00, 500);
		updateAdvertisementText();
	}
};
updateAdvertisementText();
// --- Customer Speed Upgrade Button below Advertisement ---
var customerSpeedLevel = typeof storage.customerSpeedLevel !== "undefined" ? storage.customerSpeedLevel : 0;
var customerSpeedCost = typeof storage.customerSpeedCost !== "undefined" ? storage.customerSpeedCost : 50;
var CUSTOMER_SPEED_MAX_LEVEL = 5;
var customerSpeedButton = game.addChild(LK.getAsset('upgradeButton', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: 500,
	y: 2360
}));
var customerSpeedText = new Text2('Customer Speed $' + customerSpeedCost, {
	size: 36,
	fill: 0xFFFFFF,
	wordWrap: true,
	wordWrapWidth: 260
});
customerSpeedText.anchor.set(0.5, 0.5);
customerSpeedText.x = 500;
customerSpeedText.y = 2360;
game.addChild(customerSpeedText);
function updateCustomerSpeedText() {
	if (customerSpeedLevel >= CUSTOMER_SPEED_MAX_LEVEL) {
		customerSpeedText.setText('Customer Speed (MAX)');
	} else {
		customerSpeedText.setText('Customer Speed $' + customerSpeedCost);
	}
}
customerSpeedButton.down = function () {
	if (customerSpeedLevel < CUSTOMER_SPEED_MAX_LEVEL && money >= customerSpeedCost) {
		money -= customerSpeedCost;
		customerSpeedLevel++;
		customerSpeedCost = customerSpeedCost * 2;
		// Only update current branch's customerSpeedLevel and derived stats
		if (branches[currentBranchIndex]) {
			branches[currentBranchIndex].customerSpeedLevel = customerSpeedLevel;
			branches[currentBranchIndex].customerSpeed = 3 * Math.pow(1.2, customerSpeedLevel);
		}
		// Update local variable from branch
		customerSpeed = branches[currentBranchIndex].customerSpeed;
		storage.customerSpeedLevel = customerSpeedLevel;
		storage.customerSpeedCost = customerSpeedCost;
		storage.money = money;
		LK.effects.flashObject(customerSpeedButton, 0x00FF00, 500);
		updateCustomerSpeedText();
	}
};
updateCustomerSpeedText();
// Add table button
var addTableButton = game.addChild(LK.getAsset('addTableButton', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: 1500,
	y: 2200
}));
var addTableCost = typeof storage.addTableCost !== "undefined" ? storage.addTableCost : 200 * (tableCount - 1 + 1); // 200, 400, 600, ...
var addTableText = new Text2('Add Table $' + addTableCost, {
	size: 36,
	fill: 0xFFFFFF,
	wordWrap: true,
	wordWrapWidth: 260
});
addTableText.anchor.set(0.5, 0.5);
addTableText.x = 1500;
addTableText.y = 2200;
game.addChild(addTableText);
function updateAddTableText() {
	addTableText.setText('Add Table $' + addTableCost);
}
addTableButton.down = function () {
	if (money >= addTableCost && tables.length < 20 && branches.length <= 5) {
		money -= addTableCost;
		createTable(tables.length);
		tableCount++;
		addTableCost = 200 * (tableCount - 1 + 1);
		storage.tableCount = tableCount;
		storage.addTableCost = addTableCost;
		storage.money = money;
		LK.effects.flashObject(addTableButton, 0x00FF00, 500);
		updateAddTableText();
	} else if (branches.length > 5) {
		LK.effects.flashObject(addTableButton, 0xFF0000, 500);
	}
};
updateAddTableText();
// --- New Restaurant Button ---
var branches = typeof storage.branches !== "undefined" ? storage.branches : [{
	name: "Main Branch",
	// Remove per-branch money, use only global money
	restaurantLevel: restaurantLevel,
	tableCount: tableCount,
	addTableCost: addTableCost,
	advertisementLevel: advertisementLevel,
	advertisementCost: advertisementCost,
	customerSpeedLevel: customerSpeedLevel,
	customerSpeedCost: customerSpeedCost,
	foodSales: foodSales.slice()
	// Add more per-branch state as needed
}];
var currentBranchIndex = typeof storage.currentBranchIndex !== "undefined" ? storage.currentBranchIndex : 0;
function saveBranches() {
	try {
		// Deep clone branches to avoid circular references and non-serializable objects
		var serializableBranches = [];
		for (var i = 0; i < branches.length; i++) {
			var b = branches[i];
			var branchCopy = {};
			for (var key in b) {
				// Only copy serializable properties (skip objects/functions)
				if (_typeof(b[key]) !== "object" && typeof b[key] !== "function") {
					branchCopy[key] = b[key];
				} else if (Array.isArray(b[key])) {
					// Shallow copy arrays (e.g. foodSales)
					branchCopy[key] = b[key].slice();
				}
			}
			// Always save upgradeSpeedLevel for background upgrades
			if (typeof b.upgradeSpeedLevel !== "undefined") {
				branchCopy.upgradeSpeedLevel = b.upgradeSpeedLevel;
			}
			serializableBranches.push(branchCopy);
		}
		storage.branches = serializableBranches;
		storage.currentBranchIndex = currentBranchIndex;
	} catch (e) {
		console.log("Error saving branches to storage:", e);
	}
}
function loadBranch(idx) {
	// Save current branch state before switching
	if (branches[currentBranchIndex]) {
		// Do not save per-branch money, only save other state
		branches[currentBranchIndex].restaurantLevel = restaurantLevel;
		branches[currentBranchIndex].tableCount = tableCount;
		branches[currentBranchIndex].addTableCost = addTableCost;
		branches[currentBranchIndex].advertisementLevel = advertisementLevel;
		branches[currentBranchIndex].advertisementCost = advertisementCost;
		branches[currentBranchIndex].customerSpeedLevel = customerSpeedLevel;
		branches[currentBranchIndex].customerSpeedCost = customerSpeedCost;
		branches[currentBranchIndex].foodSales = foodSales.slice();
		// Save waiterSpeed and cookingSpeed for this branch
		branches[currentBranchIndex].waiterSpeed = waiterSpeed;
		branches[currentBranchIndex].cookingSpeed = cookingSpeed;
		// Add more per-branch state as needed
	}
	// Load new branch state
	var b = branches[idx];
	if (b) {
		// Do not load per-branch money, always use global money
		restaurantLevel = b.restaurantLevel;
		tableCount = b.tableCount;
		addTableCost = b.addTableCost;
		advertisementLevel = b.advertisementLevel;
		advertisementCost = b.advertisementCost;
		customerSpeedLevel = b.customerSpeedLevel;
		customerSpeedCost = b.customerSpeedCost;
		upgradeSpeedLevel = typeof b.upgradeSpeedLevel !== "undefined" ? b.upgradeSpeedLevel : 0;
		for (var i = 0; i < foodSales.length; i++) foodSales[i] = b.foodSales[i] || 0;
		// Always restore all upgrade effects from the selected branch
		waiterSpeed = typeof b.waiterSpeed !== "undefined" ? b.waiterSpeed : 4;
		customerSpeed = typeof b.customerSpeed !== "undefined" ? b.customerSpeed : 3;
		cookingSpeed = typeof b.cookingSpeed !== "undefined" ? b.cookingSpeed : 180;
		// Reset tables, customers, etc.
		// Remove old tables
		for (var i = tables.length - 1; i >= 0; i--) {
			if (tables[i] && tables[i].destroy) tables[i].destroy();
			tables.splice(i, 1);
			orderTaken.splice(i, 1);
			tableReservations.splice(i, 1);
		}
		// Re-create tables
		for (var i = 0; i < tableCount; i++) {
			createTable(i);
		}
		// Remove all customers
		for (var i = customers.length - 1; i >= 0; i--) {
			if (customers[i] && customers[i].destroy) customers[i].destroy();
			customers.splice(i, 1);
		}
		// Remove waiter and reset active order
		if (typeof waiter !== "undefined" && waiter && waiter.destroy) {
			waiter.destroy();
		}
		waiter = game.addChild(new Waiter());
		// Spawn main waiter in front of the register (kasa)
		waiter.x = registerX - 120;
		waiter.y = registerY + 60;
		// Reset waiter's state
		waiter.state = 'idle';
		waiter.targetTable = null;
		waiter.hasFood = false;
		waiter.food = null;
		waiter.carryingFoodType = -1;
		waiter.targetTableIndex = -1;
		waiter.servingTableIndex = -1;
		waiter.hasDrink = false;
		waiter.drink = null;
		waiter.carryingDrinkType = -1;
		// Reset upgrades UI
		updateAddTableText();
		updateAdvertisementText();
		updateCustomerSpeedText();
		updateUpgradeText();
		// Update current branch name display
		if (typeof updateCurrentBranchNameText === "function") updateCurrentBranchNameText();
		// Reset last sold food info
		lastSoldFoodName = '';
		lastSoldFoodPrice = 0;
		// Save
		currentBranchIndex = idx;
		saveBranches();
	}
}
// --- New Restaurant Cost: 5000, 10000, 15000, ... (her yeni şube için 5000 artar) ---
var newRestaurantCost = 5000 * branches.length; // 1. şube: 5000, 2. şube: 10000, 3. şube: 15000, ...
if (branches.length === 0) newRestaurantCost = 5000; // fallback for 0 branch edge case
// New Restaurant button with background image
var newRestaurantButtonBg = game.addChild(LK.getAsset('newRestaurantButton', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: 1500,
	y: 2280
}));
var newRestaurantButton = new Text2('New Restaurant $' + newRestaurantCost, {
	size: 36,
	fill: 0xFFFFFF,
	wordWrap: true,
	wordWrapWidth: 260
});
newRestaurantButton.anchor.set(0.5, 0.5);
newRestaurantButton.x = 1500;
newRestaurantButton.y = 2280;
game.addChild(newRestaurantButton);
function updateNewRestaurantButton() {
	newRestaurantCost = 5000 * branches.length;
	if (branches.length === 0) newRestaurantCost = 5000;
	newRestaurantButton.setText('New Restaurant $' + newRestaurantCost);
}
newRestaurantButton.interactive = true;
newRestaurantButton.buttonMode = true;
newRestaurantButton.down = function () {
	if (branches.length >= 5) {
		LK.effects.flashObject(newRestaurantButtonBg, 0xFF0000, 500);
		return;
	}
	if (money >= newRestaurantCost) {
		money -= newRestaurantCost;
		// All upgrades start at 0 for new branch
		var newBranch = {
			name: "Branch " + (branches.length + 1),
			restaurantLevel: 1,
			tableCount: 2,
			addTableCost: 200,
			advertisementLevel: 0,
			advertisementCost: 100,
			customerSpeedLevel: 0,
			customerSpeedCost: 50,
			upgradeSpeedLevel: 0,
			waiterSpeed: 4,
			customerSpeed: 3,
			cookingSpeed: 180,
			foodSales: function () {
				var arr = [];
				for (var i = 0; i < foodTypes.length; i++) arr[i] = 0;
				return arr;
			}()
		};
		// Recalculate waiterSpeed for new branch (should be base speed)
		if (typeof waiterBaseSpeed === "undefined") {
			waiterBaseSpeed = 4;
		}
		waiterSpeed = typeof branches[currentBranchIndex] !== "undefined" && typeof branches[currentBranchIndex].waiterSpeed !== "undefined" ? branches[currentBranchIndex].waiterSpeed : waiterBaseSpeed;
		cookingSpeed = typeof branches[currentBranchIndex] !== "undefined" && typeof branches[currentBranchIndex].cookingSpeed !== "undefined" ? branches[currentBranchIndex].cookingSpeed : 180;
		branches.push(newBranch);
		saveBranches();
		updateNewRestaurantButton();
		LK.effects.flashObject(newRestaurantButtonBg, 0x00FF00, 500);
	}
};
updateNewRestaurantButton();
// --- Rivals Button (2 rows above register) ---
var rivalsButtonBg = game.addChild(LK.getAsset('branchesButton', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: 1024,
	y: registerY - 2 * 80 - 40 // 2 rows above register, 80px per row, 40px margin
}));
var rivalsButton = new Text2('Rivals', {
	size: 36,
	fill: 0xFFFFFF,
	wordWrap: true,
	wordWrapWidth: 260
});
rivalsButton.anchor.set(0.5, 0.5);
rivalsButton.x = 1024;
rivalsButton.y = registerY - 2 * 80 - 40;
game.addChild(rivalsButton);
rivalsButton.interactive = true;
rivalsButton.buttonMode = true;
// --- Rivals Panel ---
var rivalsPanel = null;
// Helper to hide panel (set visible = false)
function hideRivalsPanel() {
	if (rivalsPanel) {
		rivalsPanel.visible = false;
	}
}
var rivalCompanies = [{
	name: "Foodify",
	color: 0xff6347
}, {
	name: "QuickBite",
	color: 0x8b4513
}, {
	name: "Mealio",
	color: 0xffa500
}, {
	name: "Snackster",
	color: 0x32cd32
}, {
	name: "DineDash",
	color: 0xffd700
}, {
	name: "ChowNow",
	color: 0x6ad1e3
}, {
	name: "SliceBox",
	color: 0x8b0000
}, {
	name: "Lunchly",
	color: 0xf7b32b
}, {
	name: "Eatzy",
	color: 0xf4a259
}, {
	name: "Grubster",
	color: 0xf7e7ce
}];
// Persistent state for shares and prices
if (typeof storage.rivalShares === "undefined") {
	storage.rivalShares = [];
	for (var i = 0; i < rivalCompanies.length; i++) storage.rivalShares[i] = 0;
}
if (typeof storage.rivalPrices === "undefined") {
	storage.rivalPrices = [];
	for (var i = 0; i < rivalCompanies.length; i++) storage.rivalPrices[i] = 1000 + Math.floor(Math.random() * 500);
}
var rivalShares = storage.rivalShares;
var rivalPrices = storage.rivalPrices;
// Helper to save rivals state
function saveRivals() {
	storage.rivalShares = rivalShares.slice();
	storage.rivalPrices = rivalPrices.slice();
}
// Randomly update rival prices every 5 seconds
if (typeof game.rivalPriceTimer === "undefined") {
	game.rivalPriceTimer = 0;
}
game.updateRivalPrices = function () {
	// Each price can move randomly, but must stay between -10% and +20% of its initial value
	for (var i = 0; i < rivalPrices.length; i++) {
		// Store initial price for each company (if not already)
		if (!storage.rivalInitialPrices) storage.rivalInitialPrices = [];
		if (typeof storage.rivalInitialPrices[i] !== "number") {
			storage.rivalInitialPrices[i] = rivalPrices[i];
		}
		var initial = storage.rivalInitialPrices[i];
		var minPrice = Math.round(initial * 0.9);
		var maxPrice = Math.round(initial * 1.2);
		// Randomly move up or down by 1% to 5% of initial price
		var direction = Math.random() < 0.5 ? -1 : 1;
		var percent = 0.01 + Math.random() * 0.04; // 1% to 5%
		var delta = Math.round(initial * percent) * direction;
		var newPrice = rivalPrices[i] + delta;
		if (newPrice < minPrice) newPrice = minPrice;
		if (newPrice > maxPrice) newPrice = maxPrice;
		rivalPrices[i] = newPrice;
	}
	saveRivals();
};
game.rivalPriceTimer = 0;
// Show Rivals Panel
function showRivalsPanel() {
	if (rivalsPanel && rivalsPanel.parent) {
		rivalsPanel.parent.removeChild(rivalsPanel);
		rivalsPanel = null;
		return;
	}
	rivalsPanel = new Container();
	// Panel background
	// Use panel background, enlarged to fit all text and controls
	var rivalsPanelBgWidth = 1200;
	var rivalsPanelBgHeight = 1100;
	var panelBg = LK.getAsset('rivalsPanelBg', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 1024 + 240,
		y: 1366,
		width: rivalsPanelBgWidth,
		height: rivalsPanelBgHeight
	});
	panelBg.alpha = 0.98;
	rivalsPanel.addChild(panelBg);
	// Title
	var panelTitle = new Text2('Rivals', {
		size: 48,
		fill: 0xFFFFFF,
		font: "'GillSans',Tahoma"
	});
	panelTitle.anchor.set(0.5, 0);
	// Center title on new panel background
	panelTitle.x = 1024 + 240;
	panelTitle.y = 900;
	rivalsPanel.addChild(panelTitle);
	// List companies
	for (var i = 0; i < rivalCompanies.length; i++) {
		(function (idx) {
			var yBase = 1000 + idx * 90;
			// Company name
			var nameText = new Text2(rivalCompanies[idx].name, {
				size: 36,
				fill: rivalCompanies[idx].color,
				font: "'GillSans',Tahoma"
			});
			nameText.anchor.set(0, 0);
			// Align to left edge of new panel (panel x = 1024+240, width = 1200)
			nameText.x = 1024 + 240 - 600 + 40;
			nameText.y = yBase;
			rivalsPanel.addChild(nameText);
			// Price
			var priceText = new Text2('Price: $' + rivalPrices[idx], {
				size: 32,
				fill: 0xFFFFFF,
				font: "'GillSans',Tahoma"
			});
			priceText.anchor.set(0, 0);
			// Place price 300px to the right of name
			priceText.x = 1024 + 240 - 600 + 340;
			priceText.y = yBase;
			rivalsPanel.addChild(priceText);
			// Cost label under price
			// Calculate average cost per share as the average of actual prices paid for shares
			var avgCost = 0;
			if (!storage.rivalAvgCosts) storage.rivalAvgCosts = [];
			if (typeof storage.rivalAvgCosts[idx] === "number") {
				avgCost = storage.rivalAvgCosts[idx];
			} else {
				avgCost = 0;
			}
			var avgCostDisplay = '-';
			// Only show average cost if shares are owned and cost is > 0
			if (rivalShares[idx] > 0 && storage.rivalAvgCosts && typeof storage.rivalAvgCosts[idx] === "number" && storage.rivalAvgCosts[idx] > 0) {
				avgCostDisplay = '$' + Math.round(storage.rivalAvgCosts[idx]);
			}
			var costText = new Text2('Average: ' + avgCostDisplay, {
				size: 28,
				fill: 0xCCCCCC,
				font: "'GillSans',Tahoma"
			});
			costText.anchor.set(0, 0);
			// Place cost label directly under price (about 36px lower)
			costText.x = priceText.x;
			costText.y = priceText.y + 36;
			rivalsPanel.addChild(costText);
			// Shares owned
			var sharesText = new Text2('Shares: %' + rivalShares[idx] * 10, {
				size: 32,
				fill: 0xFFFF00,
				font: "'GillSans',Tahoma"
			});
			sharesText.anchor.set(0, 0);
			// Place shares 300px to the right of price
			sharesText.x = 1024 + 240 - 600 + 640;
			sharesText.y = yBase;
			rivalsPanel.addChild(sharesText);
			// Buy button
			var buyBtn = new Text2('Buy (10%)', {
				size: 28,
				fill: 0x00FF00,
				font: "'GillSans',Tahoma"
			});
			buyBtn.anchor.set(0.5, 0.5);
			// Place buy button 200px to the right of shares
			buyBtn.x = 1024 + 240 - 600 + 940;
			buyBtn.y = yBase + 20;
			buyBtn.interactive = true;
			buyBtn.buttonMode = true;
			buyBtn.down = function () {
				if (rivalShares[idx] < 10) {
					// Use the actual price paid for this share (not the rounded 10% cost)
					var sharePrice = rivalPrices[idx];
					var cost = Math.round(sharePrice * 0.1);
					if (money >= cost) {
						money -= cost;
						rivalShares[idx]++;
						// --- Average cost tracking ---
						if (!storage.rivalAvgCosts) storage.rivalAvgCosts = [];
						if (typeof storage.rivalAvgCosts[idx] !== "number") storage.rivalAvgCosts[idx] = 0;
						var prevShares = rivalShares[idx] - 1;
						var prevAvg = storage.rivalAvgCosts[idx];
						// Use the actual price paid for this share (sharePrice)
						if (prevShares > 0) {
							storage.rivalAvgCosts[idx] = (prevAvg * prevShares + sharePrice) / (prevShares + 1);
						} else {
							storage.rivalAvgCosts[idx] = sharePrice;
						}
						saveRivals();
						LK.effects.flashObject(buyBtn, 0x00FF00, 500);
						showRivalsPanel();
					} else {
						LK.effects.flashObject(buyBtn, 0xFF0000, 500);
					}
				} else {
					LK.effects.flashObject(buyBtn, 0xFF0000, 500);
				}
			};
			rivalsPanel.addChild(buyBtn);
			// Sell button
			var sellBtn = new Text2('Sell (10%)', {
				size: 28,
				fill: 0xFF0000,
				font: "'GillSans',Tahoma"
			});
			sellBtn.anchor.set(0.5, 0.5);
			// Place sell button 150px to the right of buy
			sellBtn.x = 1024 + 240 - 600 + 1090;
			sellBtn.y = yBase + 20;
			sellBtn.interactive = true;
			sellBtn.buttonMode = true;
			sellBtn.down = function () {
				if (rivalShares[idx] > 0) {
					var gain = Math.round(rivalPrices[idx] * 0.1);
					money += gain;
					rivalShares[idx]--;
					// --- Average cost tracking on sell ---
					if (!storage.rivalAvgCosts) storage.rivalAvgCosts = [];
					if (typeof storage.rivalAvgCosts[idx] !== "number") storage.rivalAvgCosts[idx] = 0;
					// If all shares sold, reset average cost to 0
					if (rivalShares[idx] === 0) {
						storage.rivalAvgCosts[idx] = 0;
					}
					saveRivals();
					LK.effects.flashObject(sellBtn, 0x00FF00, 500);
					showRivalsPanel();
				} else {
					LK.effects.flashObject(sellBtn, 0xFF0000, 500);
				}
			};
			rivalsPanel.addChild(sellBtn);
		})(i);
	}
	// Close button
	var closeBtn = new Text2('Close', {
		size: 36,
		fill: 0xFFFFFF
	});
	closeBtn.anchor.set(1, 0);
	// Place close button at top right of new panel background (1200px wide, centered at x=1024+240)
	closeBtn.x = 1024 + 240 + 600 - 24;
	closeBtn.y = 900 + 16;
	closeBtn.interactive = true;
	closeBtn.buttonMode = true;
	closeBtn.down = function () {
		if (rivalsPanel && rivalsPanel.parent) {
			rivalsPanel.parent.removeChild(rivalsPanel);
			rivalsPanel = null;
		}
	};
	rivalsPanel.addChild(closeBtn);
	rivalsPanel.visible = true;
	game.addChild(rivalsPanel);
}
rivalsButton.down = function () {
	showRivalsPanel();
};
// --- Branches Button ---
// Branches button with background image
var branchesButtonBg = game.addChild(LK.getAsset('branchesButton', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: 1500,
	y: 2360
}));
var branchesButton = new Text2('Branches', {
	size: 36,
	fill: 0xFFFFFF,
	wordWrap: true,
	wordWrapWidth: 260
});
branchesButton.anchor.set(0.5, 0.5);
branchesButton.x = 1500;
branchesButton.y = 2360;
game.addChild(branchesButton);
branchesButton.interactive = true;
branchesButton.buttonMode = true;
// --- Branches Panel ---
var branchesPanel = null;
// Helper to hide panel (set visible = false)
function hideBranchesPanel() {
	if (branchesPanel) {
		branchesPanel.visible = false;
	}
}
function showBranchesPanel() {
	if (branchesPanel && branchesPanel.parent) {
		branchesPanel.parent.removeChild(branchesPanel);
		branchesPanel = null;
		return;
	}
	branchesPanel = new Container();
	// Panel background
	// Use panel background at its native resolution, do not scale up
	var panelBg = LK.getAsset('branchesPanelBg', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: 1024,
		y: 1366
	});
	panelBg.alpha = 0.98;
	branchesPanel.addChild(panelBg);
	// Title
	var panelTitle = new Text2('Branches', {
		size: 48,
		fill: 0xFFFFFF,
		font: "'GillSans',Tahoma"
	});
	panelTitle.anchor.set(0.5, 0);
	panelTitle.x = 1024;
	panelTitle.y = 900;
	branchesPanel.addChild(panelTitle);
	// List branches
	// --- Layout constants for alignment ---
	var panelCenterX = 1024;
	var panelStartY = 1000;
	var branchRowHeight = 170;
	var nameY = 0;
	var earningsY = 38;
	var upgradeY = 68;
	var btnY = 110;
	var spacerY = 150;
	var nameFontSize = 44;
	var earningsFontSize = 32;
	var upgradeFontSize = 26;
	var btnFontSize = 32;
	var nameColor = 0xFFFFFF;
	var earningsColor = 0xFFFF00;
	var upgradeColor = 0x00FFFF;
	var btnColor = 0xFFFFFF;
	var branchPanelWidth = 800;
	var leftColX = panelCenterX - branchPanelWidth / 2 + 40;
	var rightColX = panelCenterX + branchPanelWidth / 2 - 40;
	for (var i = 0; i < branches.length; i++) {
		(function (idx) {
			var b = branches[idx];
			var yBase = panelStartY + idx * branchRowHeight;
			var branchBtn = new Text2((idx === currentBranchIndex ? '▶ ' : '') + b.name, {
				size: nameFontSize,
				fill: nameColor,
				font: "'GillSans',Tahoma"
			});
			branchBtn.anchor.set(0.5, 0);
			branchBtn.x = panelCenterX;
			branchBtn.y = yBase + nameY;
			branchBtn.interactive = true;
			branchBtn.buttonMode = true;
			branchBtn.down = function () {
				if (idx !== currentBranchIndex) {
					loadBranch(idx);
					showBranchesPanel();
				}
			};
			branchesPanel.addChild(branchBtn);
			// --- Show per-branch total earnings under each branch ---
			var branchTotalEarnings = 0;
			if (b.foodSales && Array.isArray(b.foodSales)) {
				for (var fs = 0; fs < b.foodSales.length; fs++) {
					var price = typeof foodPrices !== "undefined" && foodPrices[fs] !== undefined ? foodPrices[fs] : 0;
					var branchPanelUpgradeLevel = typeof b.upgradeSpeedLevel !== "undefined" ? b.upgradeSpeedLevel : 0;
					var branchPanelEarningMultiplier = Math.pow(1.25, branchPanelUpgradeLevel);
					branchTotalEarnings += (b.foodSales[fs] || 0) * Math.round(price * branchPanelEarningMultiplier);
				}
			}
			var branchEarningsText = new Text2('Total Earnings: $' + branchTotalEarnings, {
				size: earningsFontSize,
				fill: earningsColor,
				font: "'GillSans',Tahoma"
			});
			branchEarningsText.anchor.set(0.5, 0);
			branchEarningsText.x = panelCenterX;
			branchEarningsText.y = yBase + earningsY;
			branchesPanel.addChild(branchEarningsText);
			// Show upgrade level for background earnings
			var branchUpgradeLevel = typeof b.upgradeSpeedLevel !== "undefined" ? b.upgradeSpeedLevel : 0;
			var branchUpgradeText = new Text2('Background Speed Upgrade: Level ' + branchUpgradeLevel, {
				size: upgradeFontSize,
				fill: upgradeColor,
				font: "'GillSans',Tahoma"
			});
			branchUpgradeText.anchor.set(0.5, 0);
			branchUpgradeText.x = panelCenterX;
			branchUpgradeText.y = yBase + upgradeY;
			branchesPanel.addChild(branchUpgradeText);
			// --- Upgrade button (except for main branch) ---
			if (idx > 0) {
				var upgradeLevel = typeof b.upgradeSpeedLevel !== "undefined" ? b.upgradeSpeedLevel : 0;
				var upgradeCost = 500 * (upgradeLevel + 1);
				var branchUpgradeBtnText = new Text2(upgradeLevel >= 5 ? "Upgrade (MAX)" : "Upgrade $" + upgradeCost, {
					size: btnFontSize,
					fill: btnColor,
					font: "'GillSans',Tahoma"
				});
				branchUpgradeBtnText.anchor.set(0.5, 0.5);
				branchUpgradeBtnText.x = panelCenterX;
				branchUpgradeBtnText.y = yBase + btnY;
				branchUpgradeBtnText.interactive = true;
				branchUpgradeBtnText.buttonMode = true;
				branchUpgradeBtnText.down = function () {
					var upgradeLevel = typeof b.upgradeSpeedLevel !== "undefined" ? b.upgradeSpeedLevel : 0;
					var upgradeCost = 500 * (upgradeLevel + 1);
					if (money >= upgradeCost && upgradeLevel < 5) {
						money -= upgradeCost;
						b.upgradeSpeedLevel = upgradeLevel + 1;
						saveBranches();
						LK.effects.flashObject(branchUpgradeBtnText, 0x00FF00, 500);
						showBranchesPanel();
					} else {
						LK.effects.flashObject(branchUpgradeBtnText, 0xFF0000, 500);
					}
				};
				branchesPanel.addChild(branchUpgradeBtnText);
				// --- Add white text row between branches (except after last) ---
				var spacerText = new Text2(' ', {
					size: 36,
					fill: 0xFFFFFF,
					font: "'GillSans',Tahoma"
				});
				spacerText.anchor.set(0.5, 0);
				spacerText.x = panelCenterX;
				spacerText.y = yBase + spacerY;
				branchesPanel.addChild(spacerText);
			}
		})(i);
	}
	// Close button
	var closeBtn = new Text2('Close', {
		size: 36,
		fill: 0xFFFFFF
	});
	// Anchor top right
	closeBtn.anchor.set(1, 0);
	// Place at top right of the panel background (800px wide, centered at x=1024)
	closeBtn.x = 1024 + 400 - 24; // 1024 + half width - margin
	closeBtn.y = 900 + 16; // panel top y + margin
	closeBtn.interactive = true;
	closeBtn.buttonMode = true;
	closeBtn.down = function () {
		if (branchesPanel && branchesPanel.parent) {
			branchesPanel.parent.removeChild(branchesPanel);
			branchesPanel = null;
		}
	};
	branchesPanel.addChild(closeBtn);
	branchesPanel.visible = true;
	game.addChild(branchesPanel);
}
branchesButton.down = function () {
	showBranchesPanel();
};
// Customer spawn timer
var customerSpawnTimer = 0;
// Game update
game.update = function () {
	// Update rival prices every 5 seconds
	game.rivalPriceTimer++;
	if (game.rivalPriceTimer >= 300) {
		game.updateRivalPrices();
		game.rivalPriceTimer = 0;
	}
	// Update all waiters (main and extra)
	if (typeof waiter !== "undefined" && waiter.update) waiter.update();
	if (typeof game !== "undefined" && game.extraWaiters) {
		for (var w = 0; w < game.extraWaiters.length; w++) {
			if (game.extraWaiters[w] && game.extraWaiters[w].update) game.extraWaiters[w].update();
		}
	}
	// Update all chefs (main and extra)
	if (typeof chef !== "undefined" && chef.update) chef.update();
	if (typeof game !== "undefined" && game.extraChefs) {
		for (var c = 0; c < game.extraChefs.length; c++) {
			if (game.extraChefs[c] && game.extraChefs[c].update) game.extraChefs[c].update();
		}
	}
	// --- Bank Credit/Deposit Processing ---
	// Use day counter for due checks
	if (bankCreditActive) {
		if (typeof bankCreditDueDay === "undefined" && typeof storage.bankCreditDueDay !== "undefined") {
			bankCreditDueDay = storage.bankCreditDueDay;
		}
		if (typeof bankCreditDueDay === "undefined") {
			// Fallback to tick-based if not set
			if (LK.ticks >= bankCreditDueTick) {
				var payAmount = Math.floor(bankCreditAmount * 1.10);
				if (money >= payAmount) {
					money -= payAmount;
					bankCreditActive = false;
					bankCreditAmount = 0;
					bankCreditDueTick = 0;
				} else {
					money = 0;
					bankCreditActive = false;
					bankCreditAmount = 0;
					bankCreditDueTick = 0;
				}
				storage.money = money;
			}
		} else if (day >= bankCreditDueDay) {
			var payAmount = Math.floor(bankCreditAmount * 1.10);
			if (money >= payAmount) {
				money -= payAmount;
				bankCreditActive = false;
				bankCreditAmount = 0;
				bankCreditDueTick = 0;
				bankCreditDueDay = undefined;
				storage.bankCreditDueDay = undefined;
			} else {
				money = 0;
				bankCreditActive = false;
				bankCreditAmount = 0;
				bankCreditDueTick = 0;
				bankCreditDueDay = undefined;
				storage.bankCreditDueDay = undefined;
			}
			storage.money = money;
		}
	}
	if (bankDepositActive) {
		if (typeof bankDepositDueDay === "undefined" && typeof storage.bankDepositDueDay !== "undefined") {
			bankDepositDueDay = storage.bankDepositDueDay;
		}
		if (typeof bankDepositDueDay === "undefined") {
			// Fallback to tick-based if not set
			if (LK.ticks >= bankDepositDueTick) {
				var returnAmount = Math.floor(bankDepositAmount * 1.20);
				money += returnAmount;
				bankDepositActive = false;
				bankDepositAmount = 0;
				bankDepositDueTick = 0;
				storage.money = money;
			}
		} else if (day >= bankDepositDueDay) {
			var returnAmount = Math.floor(bankDepositAmount * 1.20);
			money += returnAmount;
			bankDepositActive = false;
			bankDepositAmount = 0;
			bankDepositDueTick = 0;
			bankDepositDueDay = undefined;
			storage.bankDepositDueDay = undefined;
			storage.money = money;
		}
	}
	// Update money display
	moneyText.setText('Money: $' + money);
	// --- Day update ---
	if (typeof game.lastDayTick === "undefined") game.lastDayTick = 0;
	if (typeof game.lastDay === "undefined") game.lastDay = day;
	if (LK.ticks - game.lastDayTick >= 1440) {
		// 1440 ticks = 24 hours at 60fps
		day++;
		game.lastDayTick = LK.ticks;
		storage.day = day;
	}
	dayText.setText('Day: ' + day);
	// --- Live update for Rivals Panel ---
	if (rivalsPanel && rivalsPanel.visible) {
		// Find all children and update their text if they are price/cost/shares
		for (var i = 0; i < rivalCompanies.length; i++) {
			// Find priceText, costText, sharesText for this idx
			var yBase = 1000 + i * 90;
			for (var j = 0; j < rivalsPanel.children.length; j++) {
				var child = rivalsPanel.children[j];
				// Price
				if (child && child.x === 1024 + 240 - 600 + 340 && child.y === yBase) {
					child.setText('Price: $' + rivalPrices[i]);
				}
				// Cost
				if (child && child.x === 1024 + 240 - 600 + 340 && child.y === yBase + 36) {
					var avgCostDisplay = '-';
					if (rivalShares[i] > 0 && storage.rivalAvgCosts && typeof storage.rivalAvgCosts[i] === "number" && storage.rivalAvgCosts[i] > 0) {
						avgCostDisplay = '$' + Math.round(storage.rivalAvgCosts[i]);
					}
					child.setText('Average: ' + avgCostDisplay);
				}
				// Shares
				if (child && child.x === 1024 + 240 - 600 + 640 && child.y === yBase) {
					child.setText('Shares: %' + rivalShares[i] * 10);
				}
			}
		}
	}
	// --- Live update for Branches Panel ---
	// --- Live update for current branch name ---
	if (typeof updateCurrentBranchNameText === "function") updateCurrentBranchNameText();
	if (branchesPanel && branchesPanel.visible) {
		for (var i = 0; i < branches.length; i++) {
			var b = branches[i];
			var yBase = 1000 + i * 170;
			var branchTotalEarnings = 0;
			if (b.foodSales && Array.isArray(b.foodSales)) {
				for (var fs = 0; fs < b.foodSales.length; fs++) {
					var price = typeof foodPrices !== "undefined" && foodPrices[fs] !== undefined ? foodPrices[fs] : 0;
					var branchPanelUpgradeLevel = typeof b.upgradeSpeedLevel !== "undefined" ? b.upgradeSpeedLevel : 0;
					var branchPanelEarningMultiplier = Math.pow(1.25, branchPanelUpgradeLevel);
					branchTotalEarnings += (b.foodSales[fs] || 0) * Math.round(price * branchPanelEarningMultiplier);
				}
			}
			// Update earnings text and upgrade level text
			for (var j = 0; j < branchesPanel.children.length; j++) {
				var child = branchesPanel.children[j];
				// Earnings
				if (child && child.x === 1024 && child.y === yBase + 38) {
					child.setText('Total Earnings: $' + branchTotalEarnings);
				}
				// Upgrade level
				if (child && child.x === 1024 && child.y === yBase + 68) {
					var branchUpgradeLevel = typeof b.upgradeSpeedLevel !== "undefined" ? b.upgradeSpeedLevel : 0;
					child.setText('Background Speed Upgrade: Level ' + branchUpgradeLevel);
				}
				// Upgrade button (for non-main branches)
				if (i > 0 && child && child.x === 1024 && child.y === yBase + 110) {
					var upgradeLevel = typeof b.upgradeSpeedLevel !== "undefined" ? b.upgradeSpeedLevel : 0;
					var upgradeCost = 500 * (upgradeLevel + 1);
					child.setText(upgradeLevel >= 5 ? "Upgrade (MAX)" : "Upgrade $" + upgradeCost);
				}
				// Branch name (show selector arrow if current)
				if (child && child.x === 1024 && child.y === yBase) {
					child.setText((i === currentBranchIndex ? '▶ ' : '') + b.name);
					// Always force white color for branch name
					child.setStyle({
						fill: 0xFFFFFF
					});
				}
			}
		}
	}
	// Update Top 5 Most Sold Foods Panel
	// Find top 5 indices by sales count (only foodSales, not drinks)
	var topIndices = [];
	for (var i = 0; i < foodSales.length; i++) topIndices.push(i);
	topIndices.sort(function (a, b) {
		return foodSales[b] - foodSales[a];
	});
	for (var i = 0; i < 5; i++) {
		var idx = topIndices[i];
		if (foodSales[idx] > 0) {
			// Show food icon, count, and total earned
			// Create icon if not already present
			if (!top5TextLines[i].foodIcon) {
				var icon = LK.getAsset(foodImageIds[idx], {
					anchorX: 0.5,
					anchorY: 0.5,
					// Place icon to the left of the text, with a small margin
					x: top5TextLines[i].x - 50,
					y: top5TextLines[i].y + 20,
					width: 40,
					height: 40
				});
				game.addChild(icon);
				top5TextLines[i].foodIcon = icon;
			} else {
				// Update icon to correct food type and position
				top5TextLines[i].foodIcon.setAsset(foodImageIds[idx]);
				// Place icon to the left of the text, with a small margin
				top5TextLines[i].foodIcon.x = top5TextLines[i].x - 50;
				top5TextLines[i].foodIcon.y = top5TextLines[i].y + 20;
				top5TextLines[i].foodIcon.visible = true;
			}
			// Calculate total earned for this food, with 25% per-upgrade multiplicative bonus for active branch
			var activeBranchUpgradeLevel = typeof upgradeSpeedLevel !== "undefined" ? upgradeSpeedLevel : 0;
			var earningMultiplier = Math.pow(1.25, activeBranchUpgradeLevel);
			var totalEarned = foodSales[idx] * Math.round(foodPrices[idx] * earningMultiplier);
			top5TextLines[i].setText(i + 1 + '. ' + foodNames[idx] + ' - ' + foodSales[idx] + ' pcs  $' + totalEarned);
		} else {
			top5TextLines[i].setText('');
			// Hide icon if present
			if (top5TextLines[i].foodIcon) {
				top5TextLines[i].foodIcon.visible = false;
			}
		}
	}
	// Spawn customers
	customerSpawnTimer++;
	if (customerSpawnTimer > 300) {
		// Every 5 seconds
		customerSpawnTimer = 0;
		// Check if there are waiting customers first
		var hasWaitingCustomer = false;
		for (var j = 0; j < customers.length; j++) {
			if (customers[j].state === 'entering' && !customers[j].targetTable) {
				hasWaitingCustomer = true;
				// Set waiting customer's position to the exit (register) location
				customers[j].x = registerX;
				customers[j].y = registerY;
				// Try to assign a table to waiting customer
				for (var k = 0; k < tables.length; k++) {
					if (!tables[k].occupied && !tables[k].customer && !tableReservations[k]) {
						customers[j].targetTable = tables[k];
						customers[j].targetTableIndex = k;
						tableReservations[k] = true; // Reserve the table
						break;
					}
				}
				break;
			}
		}
		// Only spawn new customer if no one is waiting
		if (!hasWaitingCustomer) {
			// Başlangıçta müşteri sayısı 1, her reklam yükseltmesinde +2 müşteri
			var advLevel = typeof advertisementLevel !== "undefined" ? advertisementLevel : typeof storage.advertisementLevel !== "undefined" ? storage.advertisementLevel : 0;
			var spawnCount = 1 + 2 * advLevel;
			for (var spawnIdx = 0; spawnIdx < spawnCount; spawnIdx++) {
				var customer = game.addChild(new Customer());
				// Customers now enter from the exit (register) location
				customer.x = registerX;
				customer.y = registerY;
				customers.push(customer);
				// Try to find available table
				for (var i = 0; i < tables.length; i++) {
					if (!tables[i].occupied && !tables[i].customer && !tableReservations[i]) {
						customer.targetTable = tables[i];
						customer.targetTableIndex = i;
						tableReservations[i] = true; // Reserve the table
						break;
					}
				}
				// If no table available, customer will wait
			}
		}
	}
	// Simulate background sales for all branches (except current)
	// Background branches earn at 10% speed, but can be increased by upgrades
	if (LK.ticks % 60 === 0 && branches.length > 1) {
		for (var bidx = 0; bidx < branches.length; bidx++) {
			if (bidx === currentBranchIndex) continue;
			var b = branches[bidx];
			// Calculate background earning multiplier: base 0.1 (10%), each upgrade increases by 25% multiplicatively
			var branchUpgradeLevel = typeof b.upgradeSpeedLevel !== "undefined" ? b.upgradeSpeedLevel : 0;
			var backgroundMultiplier = 0.1 * Math.pow(1.25, branchUpgradeLevel);
			if (backgroundMultiplier > 1) backgroundMultiplier = 1;
			// Simulate a small number of sales per tick (e.g. 0-2 random sales)
			var salesCount = Math.floor(Math.random() * 3); // 0, 1, or 2
			// Apply multiplier (simulate fractional sales probabilistically)
			var effectiveSales = 0;
			for (var s = 0; s < salesCount; s++) {
				if (Math.random() < backgroundMultiplier) {
					effectiveSales++;
				}
			}
			for (var s = 0; s < effectiveSales; s++) {
				// Pick a random food type
				var foodIdx = Math.floor(Math.random() * foodTypes.length);
				if (!b.foodSales) b.foodSales = [];
				if (typeof b.foodSales[foodIdx] !== "number") b.foodSales[foodIdx] = 0;
				b.foodSales[foodIdx]++;
				// Add money to global money
				if (typeof foodPrices[foodIdx] === "number") {
					money += foodPrices[foodIdx];
				}
			}
		}
	}
	// Save periodically
	if (LK.ticks % 300 === 0) {
		storage.money = money;
	}
};
 Chair - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
 Chef - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
 Müşteri - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
 Bayan Müşteri - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
 Müşteri - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
 Garson - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
 Üstten görünüm table - Yazısız - Gerçekçi. In-Game asset. 2d. High contrast. No shadows
 Masa ve sandalyesiz - üstten görünüm restaurant gerçekçi - yazısız. In-Game asset. 2d. High contrast. No shadows
 Mutfak - üstten görünüm - gerçekçi - yazısız. In-Game asset. 2d. High contrast. No shadows
 Üstten Bakış Yazar Kasa - Yazısız - Gerçekçi. In-Game asset. 2d. High contrast. No shadows
 Yemek - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
 Burger - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
 Curry - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
 dumpling - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
 pasta - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
 Pizza - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
 salad - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
 Soup - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
 Steak - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
 Tabakta Sushi - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
 Tabakta Taco - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
 İçindeki içecekler görünen, meşrubat dolabı, gerçekçi - yazısız. In-Game asset. 2d. High contrast. No shadows
 Ayran - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
 caffee - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
 Cola - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
 Fanta - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
 İcetea - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
 OrangeJuice - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
 Maden suyu - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
 Su şişesi - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows