--
-- This updates a 1.28.10 database to 1.28.99
--

--
-- Add Controls definition for ONVIF
-- Add Controls definition for FI9831W
-- Add Controls definition for FI8918W
--
INSERT INTO Controls 
SELECT * FROM (SELECT NULL as Id,
                     'ONVIF Camera' as Name,
                     'Ffmpeg' as Type,
                     'onvif' as Protocol,
                     0 as CanWake,
                     0 as CanSleep,
                     1 as CanReset,
                     1 as CanZoom,
                     0 as CanAutoZoom,
                     0 as CanZoomAbs,
                     0 as CanZoomRel,
                     1 as CanZoomCon,
                     0 as MinZoomRange,
                     0 as MaxZoomRange,
                     0 as MinZoomStep,
                     0 as MaxZoomStep,
                     0 as HasZoomSpeed,
                     0 as MinZoomSpeed,
                     0 as MaxZoomSpeed,
                     0 as CanFocus,
                     0 as CanAutoFocus,
                     0 as CanFocusAbs,
                     0 as CanFocusRel,
                     0 as CanFocusCon,
                     0 as MinFocusRange,
                     0 as MaxFocusRange,
                     0 as MinFocusStep,
                     0 as MaxFocusStep,
                     0 as HasFocusSpeed,
                     0 as MinFocusSpeed,
                     0 as MaxFocusSpeed,
                     1 as CanIris,
                     0 as CanAutoIris,
                     1 as CanIrisAbs,
                     0 as CanIrisRel,
                     0 as CanIrisCon,
                     0 as MinIrisRange,
                     255 as MaxIrisRange,
                     16 as MinIrisStep,
                     16 as MaxIrisStep,
                     0 as HasIrisSpeed,
                     0 as MinIrisSpeed,
                     0 as MaxIrisSpeed,
                     0 as CanGain,
                     0 as CanAutoGain,
                     0 as CanGainAbs,
                     0 as CanGainRel,
                     0 as CanGainCon,
                     0 as MinGainRange,
                     0 as MaxGainRange,
                     0 as MinGainStep,
                     0 as MaxGainStep,
                     0 as HasGainSpeed,
                     0 as MinGainSpeed,
                     0 as MaxGainSpeed,
                     1 as CanWhite,
                     0 as CanAutoWhite,
                     1 as CanWhiteAbs,
                     0 as CanWhiteRel,
                     0 as CanWhiteCon,
                     0 as MinWhiteRange,
                     6 as MaxWhiteRange,
                     1 as MinWhiteStep,
                     1 as MaxWhiteStep,
                     0 as HasWhiteSpeed,
                     0 as MinWhiteSpeed,
                     0 as MaxWhiteSpeed,
                     1 as HasPresets,
                     10 as NumPresets,
                     0 as HasHomePreset,
                     1 as CanSetPresets,
                     1 as CanMove,
                     1 as CanMoveDiag,
                     0 as CanMoveMap,
                     0 as CanMoveAbs,
                     0 as CanMoveRel,
                     1 as CanMoveCon,
                     1 as CanPan,
                     0 as MinPanRange,
                     0 as MaxPanRange,
                     0 as MinPanStep,
                     0 as MaxPanStep,
                     0 as HasPanSpeed,
                     0 as MinPanSpeed,
                     0 as MaxPanSpeed,
                     0 as HasTurboPan,
                     0 as TurboPanSpeed,
                     1 as CanTilt,
                     0 as MinTiltRange,
                     0 as MaxTiltRange,
                     0 as MinTiltStep,
                     0 as MaxTiltStep,
                     0 as HasTiltSpeed,
                     0 as MinTiltSpeed,
                     0 as MaxTiltSpeed,
                     0 as HasTurboTilt,
                     0 as TurboTiltSpeed,
                     0 as CanAutoScan,
                     0 as NumScanPaths) AS tmp
WHERE NOT EXISTS (
    SELECT Name FROM Controls WHERE name = 'ONVIF Camera'
) LIMIT 1;

INSERT INTO Controls 
SELECT * FROM (SELECT NULL as Id,
                     'Foscam 9831W' as Name,
                     'Ffmpeg' as Type,
                     'FI9831W' as Protocol,
                     0 as CanWake,
                     0 as CanSleep,
                     1 as CanReset,
                     0 as CanZoom,
                     0 as CanAutoZoom,
                     0 as CanZoomAbs,
                     0 as CanZoomRel,
                     0 as CanZoomCon,
                     0 as MinZoomRange,
                     0 as MaxZoomRange,
                     0 as MinZoomStep,
                     0 as MaxZoomStep,
                     0 as HasZoomSpeed,
                     0 as MinZoomSpeed,
                     0 as MaxZoomSpeed,
                     0 as CanFocus,
                     0 as CanAutoFocus,
                     0 as CanFocusAbs,
                     0 as CanFocusRel,
                     0 as CanFocusCon,
                     0 as MinFocusRange,
                     0 as MaxFocusRange,
                     0 as MinFocusStep,
                     0 as MaxFocusStep,
                     0 as HasFocusSpeed,
                     0 as MinFocusSpeed,
                     0 as MaxFocusSpeed,
                     0 as CanIris,
                     0 as CanAutoIris,
                     0 as CanIrisAbs,
                     0 as CanIrisRel,
                     0 as CanIrisCon,
                     0 as MinIrisRange,
                     0 as MaxIrisRange,
                     0 as MinIrisStep,
                     0 as MaxIrisStep,
                     0 as HasIrisSpeed,
                     0 as MinIrisSpeed,
                     0 as MaxIrisSpeed,
                     0 as CanGain,
                     0 as CanAutoGain,
                     0 as CanGainAbs,
                     0 as CanGainRel,
                     0 as CanGainCon,
                     0 as MinGainRange,
                     0 as MaxGainRange,
                     0 as MinGainStep,
                     0 as MaxGainStep,
                     0 as HasGainSpeed,
                     0 as MinGainSpeed,
                     0 as MaxGainSpeed,
                     0 as CanWhite,
                     0 as CanAutoWhite,
                     0 as CanWhiteAbs,
                     0 as CanWhiteRel,
                     0 as CanWhiteCon,
                     0 as MinWhiteRange,
                     0 as MaxWhiteRange,
                     0 as MinWhiteStep,
                     0 as MaxWhiteStep,
                     0 as HasWhiteSpeed,
                     0 as MinWhiteSpeed,
                     0 as MaxWhiteSpeed,
                     0 as HasPresets,
                     16 as NumPresets,
                     1 as HasHomePreset,
                     1 as CanSetPresets,
                     1 as CanMove,
                     1 as CanMoveDiag,
                     0 as CanMoveMap,
                     0 as CanMoveAbs,
                     0 as CanMoveRel,
                     1 as CanMoveCon,
                     1 as CanPan,
                     0 as MinPanRange,
                     360 as MaxPanRange,
                     0 as MinPanStep,
                     360 as MaxPanStep,
                     1 as HasPanSpeed,
                     0 as MinPanSpeed,
                     4 as MaxPanSpeed,
                     0 as HasTurboPan,
                     0 as TurboPanSpeed,
                     1 as CanTilt,
                     0 as MinTiltRange,
                     90 as MaxTiltRange,
                     0 as MinTiltStep,
                     90 as MaxTiltStep,
                     0 as HasTiltSpeed,
                     0 as MinTiltSpeed,
                     0 as MaxTiltSpeed,
                     0 as HasTurboTilt,
                     0 as TurboTiltSpeed,
                     0 as CanAutoScan,
                     0 as NumScanPaths) AS tmp
WHERE NOT EXISTS (
    SELECT Name FROM Controls WHERE name = 'Foscam 9831W'
) LIMIT 1;

INSERT INTO Controls 
SELECT * FROM (SELECT NULL as Id,
                     'Foscam FI8918W' as Name,
                     'Ffmpeg' as Type,
                     'FI8918W' as Protocol,
                     0 as CanWake,
                     0 as CanSleep,
                     1 as CanReset,
                     0 as CanZoom,
                     0 as CanAutoZoom,
                     0 as CanZoomAbs,
                     0 as CanZoomRel,
                     0 as CanZoomCon,
                     0 as MinZoomRange,
                     0 as MaxZoomRange,
                     0 as MinZoomStep,
                     0 as MaxZoomStep,
                     0 as HasZoomSpeed,
                     0 as MinZoomSpeed,
                     0 as MaxZoomSpeed,
                     0 as CanFocus,
                     0 as CanAutoFocus,
                     0 as CanFocusAbs,
                     0 as CanFocusRel,
                     0 as CanFocusCon,
                     0 as MinFocusRange,
                     0 as MaxFocusRange,
                     0 as MinFocusStep,
                     0 as MaxFocusStep,
                     0 as HasFocusSpeed,
                     0 as MinFocusSpeed,
                     0 as MaxFocusSpeed,
                     0 as CanIris,
                     0 as CanAutoIris,
                     0 as CanIrisAbs,
                     0 as CanIrisRel,
                     0 as CanIrisCon,
                     0 as MinIrisRange,
                     0 as MaxIrisRange,
                     0 as MinIrisStep,
                     0 as MaxIrisStep,
                     0 as HasIrisSpeed,
                     0 as MinIrisSpeed,
                     0 as MaxIrisSpeed,
                     0 as CanGain,
                     0 as CanAutoGain,
                     0 as CanGainAbs,
                     0 as CanGainRel,
                     0 as CanGainCon,
                     0 as MinGainRange,
                     0 as MaxGainRange,
                     0 as MinGainStep,
                     0 as MaxGainStep,
                     0 as HasGainSpeed,
                     0 as MinGainSpeed,
                     0 as MaxGainSpeed,
                     0 as CanWhite,
                     0 as CanAutoWhite,
                     0 as CanWhiteAbs,
                     0 as CanWhiteRel,
                     0 as CanWhiteCon,
                     0 as MinWhiteRange,
                     0 as MaxWhiteRange,
                     0 as MinWhiteStep,
                     0 as MaxWhiteStep,
                     0 as HasWhiteSpeed,
                     0 as MinWhiteSpeed,
                     0 as MaxWhiteSpeed,
                     0 as HasPresets,
                     8 as NumPresets,
                     0 as HasHomePreset,
                     1 as CanSetPresets,
                     1 as CanMove,
                     1 as CanMoveDiag,
                     0 as CanMoveMap,
                     0 as CanMoveAbs,
                     0 as CanMoveRel,
                     1 as CanMoveCon,
                     1 as CanPan,
                     0 as MinPanRange,
                     360 as MaxPanRange,
                     0 as MinPanStep,
                     360 as MaxPanStep,
                     1 as HasPanSpeed,
                     0 as MinPanSpeed,
                     4 as MaxPanSpeed,
                     0 as HasTurboPan,
                     0 as TurboPanSpeed,
                     1 as CanTilt,
                     0 as MinTiltRange,
                     90 as MaxTiltRange,
                     0 as MinTiltStep,
                     90 as MaxTiltStep,
                     0 as HasTiltSpeed,
                     0 as MinTiltSpeed,
                     0 as MaxTiltSpeed,
                     0 as HasTurboTilt,
                     0 as TurboTiltSpeed,
                     0 as CanAutoScan,
                     0 as NumScanPaths) AS tmp
WHERE NOT EXISTS (
    SELECT Name FROM Controls WHERE name = 'Foscam FI8918W'
) LIMIT 1;

--
-- Hide USE_DEEP_STORAGE from user to prevent accidental event loss
--
UPDATE `zm`.`Config` SET `Category`='hidden' WHERE `Name`='ZM_USE_DEEP_STORAGE';

--
-- Add Id column to State
--

SET @s = (SELECT IF(
    (SELECT COUNT(*)
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE table_name = 'States'
    AND table_schema = DATABASE()
    AND column_name = 'Id'
    ) > 0,
"SELECT 'Column Id exists in States'",
"ALTER TABLE States DROP PRIMARY KEY, ADD `Id` int(10) unsigned auto_increment NOT NULL PRIMARY KEY FIRST"
));

PREPARE stmt FROM @s;
EXECUTE stmt;

-- PP:The States table will be updated to have a new column called IsActive
-- used to keep track of which custom state is active (if any)
SET @s = (SELECT IF(
	(SELECT COUNT(*)
	FROM INFORMATION_SCHEMA.COLUMNS
	WHERE table_name = 'States'
	AND table_schema = DATABASE()
	AND column_name = 'IsActive'
	) > 0,
"SELECT 'Column IsActive  exists in States'",
"ALTER TABLE `States` ADD `IsActive` tinyint(3) unsigned not null default 0 AFTER `Definition`"
));

PREPARE stmt FROM @s;
EXECUTE stmt;

-- PP:If default state does not exist, create it and set its IsActive to 1
INSERT INTO States (Name,Definition,IsActive) 
	SELECT * FROM (SELECT 'default', '', '1') AS tmp
	WHERE NOT EXISTS (
		SELECT Name FROM States WHERE Name = 'default'
	) LIMIT 1;

-- PP:Start with a sane isActive state
UPDATE States SET IsActive = '0';
UPDATE States SET IsActive = '1' WHERE Name = 'default'; 

-- PP:Finally convert States to make sure Names are unique
-- If duplicate states existed while upgrading, that is
-- very likely an error that ZM allowed earlier, so
-- we are picking up the first one and deleting the others
ALTER TABLE States ADD UNIQUE (Name);

SET @s = (SELECT IF( 
    (SELECT COUNT(*)
    FROM INFORMATION_SCHEMA.TABLES
    WHERE table_name = 'Servers'
    AND table_schema = DATABASE()
    ) > 0,
"SELECT 'Servers table exists'",
"CREATE TABLE `Servers` (
  `Id` int(10) unsigned NOT NULL auto_increment,
  `Name` varchar(64) NOT NULL default '',
  `State_Id`    int(10) unsigned,
  PRIMARY KEY (`Id`)
)"
));

PREPARE stmt FROM @s;
EXECUTE stmt;

