DROP procedure IF EXISTS `vn`.`zoneNestCountry`;

DELIMITER $$
CREATE DEFINER=`root`@`%` PROCEDURE `vn`.`zoneNestCountry`()
BEGIN

	DECLARE vDone BOOL;
    DECLARE vParent INT DEFAULT 1;
    DECLARE vGeoFk INT;
    DECLARE vChildFk INT;
    DECLARE vChildName VARCHAR(100);
	DECLARE countryCur CURSOR FOR
		SELECT 1, c.id, c.`country`
	        FROM vn.country c 
	        	JOIN tmp.country tc ON tc.id = c.id
			ORDER BY c.`country`;
			
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;
    
	-- Remove existing countries
    DELETE zg FROM vn.country c
		JOIN tmp.country tc ON tc.id = c.id
		JOIN tmp.zoneGeo zg ON zg.id = c.geoFk;
    
    -- Reset country geoFk
	UPDATE vn.country c
		JOIN tmp.country tc ON tc.id = c.id
		    SET c.geoFk = NULL 
        WHERE c.geoFk IS NOT NULL;

	-- > Country cursor start
	OPEN countryCur;
	
	countryLoop: LOOP
		SET vDone = FALSE;
        
		FETCH countryCur INTO vParent, vChildFk, vChildName;
		
		IF vDone THEN
			LEAVE countryLoop;
		END IF;
		
		CALL nst.nodeAdd('tmp', 'zoneGeo', vParent, vChildName);
	END LOOP;
	CLOSE countryCur;
	-- < Country cursor end
	
	UPDATE country c
		JOIN tmp.zoneGeo z ON z.name = c.country
			SET c.geoFk = z.id
        WHERE c.geoFk IS NULL;
END$$

DELIMITER ;

