#!/bin/bash


# Fixes all little inconsistent data
# This script is meant to be executed once, with all the inconsistencies.
# and changes to be made in the source production database before the migration process.
#
# We monitor the changes with SELECT name,session,comment FROM summary_t WHERE comment IS NOT NULL ORDER BY session, name;

if test -f .env; then
	source .env
else
	echo "No environemnt variables file found. Exiting"
	exit 255
fi

DATABASE=${1:-${SOURCE_DATABASE}}

echo "Applying database fixes before migration."
sqlite3 ${DATABASE} <<EOF
.echo on
BEGIN;

----------------------
-- Purge empty batches
----------------------

DELETE FROM batch_t WHERE calibrations = 0;

--------------------------------------------------------------
-- Fix zptess bug: 20.44 => 20.50 as ficticious ZP in rounds_t
--------------------------------------------------------------

UPDATE summary_t SET mag = mag + 0.06
WHERE session IN (SELECT DISTINCT session from rounds_t WHERE zp_fict = 20.44);

UPDATE rounds_t SET zp_fict = 20.50 WHERE zp_fict = 20.44;

-------------------------------
-- Fix collector info weirdness
-------------------------------

UPDATE summary_t SET collector = 'standard'
WHERE collector LIKE 'Sí%' OR collector LIKE 'Si%';

-------------------------------------------------------
-- Fix a bunch of comment updates with the same pattern
-------------------------------------------------------

UPDATE summary_t SET collector = 'standard'
WHERE collector LIKE 'Sí%' OR collector LIKE 'Si%';

UPDATE summary_t SET comment = 'Phot: ' || comment
WHERE comment IS NOT NULL AND comment NOT LIKE 'Phot:%' -- makes it retryable
AND comment LIKE 'Updated with tessdb MAC%';

UPDATE summary_t SET comment = 'Phot: ' || comment
WHERE comment IS NOT NULL AND comment NOT LIKE 'Phot:%' -- makes it retryable
AND comment LIKE 'MAC de tessdb%';

UPDATE summary_t SET comment = 'Summ: ' || comment
WHERE comment IS NOT NULL AND comment NOT LIKE 'Summ:%' -- makes it retryable
AND comment LIKE 'calibrado por Cristobal%';

UPDATE summary_t SET comment = 'Summ: ' || comment
WHERE comment IS NOT NULL AND comment NOT LIKE 'Summ:%' -- makes it retryable
AND comment LIKE 'reparado por Cristobal y recalibrado%';

UPDATE summary_t SET comment = 'Summ: ' || comment
WHERE comment IS NOT NULL AND comment NOT LIKE 'Summ:%' -- makes it retryable
AND comment LIKE 'recalibrado';

UPDATE summary_t SET comment = 'Summ: ' || comment
WHERE comment IS NOT NULL AND comment NOT LIKE 'Summ:%' -- makes it retryable
AND comment LIKE 'recalibrado, calibracion anterior manual%';

UPDATE summary_t SET comment = 'PhotSumm: ' || comment
WHERE comment IS NOT NULL AND comment NOT LIKE 'PhotSumm:%' -- makes it retryable
AND comment LIKE 'reparado y recalibrado (nueva MAC)%';

UPDATE summary_t SET comment = 'Summ: ' || comment
WHERE comment IS NOT NULL AND comment NOT LIKE 'Summ:%' -- makes it retryable
AND comment LIKE 'recalibrado, no se tienen datos de calibracion anterior%';

UPDATE summary_t SET comment = 'Summ: ' || comment
WHERE comment IS NOT NULL AND comment NOT LIKE 'Summ:%' -- makes it retryable
AND comment LIKE 'Entrada%';

--------------------------------------------------------------
-- Fix individual photometers to add Photometer level comments
--------------------------------------------------------------

UPDATE summary_t SET comment = 'Phot: ' || comment
WHERE comment NOT LIKE 'Phot:%' -- makes it retryable
AND name = 'stars3' AND session = '1000-01-01T00:00:00';

UPDATE summary_t SET comment = 'Phot: ' || comment
WHERE comment NOT LIKE 'Phot:%' -- makes it retryable
AND name = 'stars8' AND session = '1000-01-01T00:07:00';

UPDATE summary_t SET comment = 'Phot: ' || comment
WHERE comment NOT LIKE 'Phot:%' -- makes it retryable
AND name = 'stars15' AND session = '1000-01-01T00:14:00';

UPDATE summary_t SET comment = 'Phot: ' || comment
WHERE comment NOT LIKE 'Phot:%' -- makes it retryable
AND name = 'stars17' AND session = '1000-01-01T00:16:00';

-----------------------------------------------------------
-- Fix individual photometers to add Summary level comments
-----------------------------------------------------------

UPDATE summary_t SET comment = 'Summ: ' || comment
WHERE comment NOT LIKE 'Summ:%' -- makes it retryable
AND name = 'stars315' AND session = '1000-01-01T03:28:00';

UPDATE summary_t SET comment = 'Summ: ' || comment
WHERE comment NOT LIKE 'Summ:%' -- makes it retryable
AND name = 'stars737' AND session = '1000-01-01T04:14:00';

UPDATE summary_t SET comment = 'Summ: ' || comment
WHERE comment NOT LIKE 'Summ:%' -- makes it retryable
AND name = 'stars1261' AND session = '2024-01-10T12:14:56';

UPDATE summary_t SET comment = 'Summ: ' || comment
WHERE comment NOT LIKE 'Summ:%' -- makes it retryable
AND name = 'stars1293' AND session = '2024-05-07T10:10:40';

UPDATE summary_t SET comment = 'Summ: ' || comment
WHERE comment NOT LIKE 'Summ:%' -- makes it retryable
AND name = 'stars1277' AND session = '2024-05-08T08:20:12';

UPDATE summary_t SET comment = NULL
WHERE comment IS NOT NULL 
AND comment NOT IN 
	(SELECT comment FROM summary_t 
	WHERE comment LIKE 'Phot:%' 
	OR comment LIKE 'Summ:%' OR comment LIKE 'PhotSumm:%');

--------------------------------------
-- Fix photometer duplicate rows error
--------------------------------------

UPDATE summary_t 
SET firmware = 'May 19 2016' , filter = 'UV/IR-740', plug = 'USB-A+serial', box = 'Caja plastico antigua', collector = 'standard', comment = 'PhotSumm: Fotometro de referencia. 20.44 es el ZP para que sus lecturas coincidan con un Unihedron SQM'
WHERE name = 'stars3';

UPDATE summary_t 
SET comment = (SELECT comment from summary_t WHERE name = 'stars222' AND COMMENT IS NOT NULL)
WHERE name = 'stars222' AND comment IS NULL;

UPDATE summary_t 
SET comment = (SELECT comment from summary_t WHERE name = 'stars300' AND COMMENT IS NOT NULL)
WHERE name = 'stars300' AND comment IS NULL;

UPDATE summary_t 
SET comment = 'PhotSumm: MAC de tessdb (Rafa, 2023-09-21). Originalmente tenia esa pero ha sido renombrado 3 veces mas. Reparado y recalibrado (nueva MAC)'
WHERE name = 'stars292' 
AND (comment LIKE 'Phot: %' OR COMMENT LIKE 'PhotSumm: %');

UPDATE summary_t 
SET comment = 'PhotSumm: MAC de tessdb (Rafa, 2023-09-21). Reparado y recalibrado (nueva MAC)'
WHERE name = 'stars293'
AND (comment LIKE 'Phot: %' OR COMMENT LIKE 'PhotSumm: %');

UPDATE summary_t 
SET comment = 'PhotSumm: MAC de tessdb (Rafa, 2023-09-21). Reparado y recalibrado por Cristobal'
WHERE name = 'stars241'
AND (comment LIKE 'Phot: %' OR COMMENT LIKE 'Summ: %');

UPDATE summary_t 
SET comment = 'PhotSumm: MAC de tessdb (Rafa, 2023-09-21). Originalmente tenia esa pero ha sido renombrado 1 veces mas.'
WHERE name = 'stars246';

COMMIT;

EOF
