<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd
        http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">
    <changeSet id="2" author="bhavinrshah">
        <sql dbms="mysql" endDelimiter=";;" splitStatements="true" stripComments="true">
            USE art_relations;;

            DROP TRIGGER IF EXISTS `before_insert_release`;;

            CREATE DEFINER = 'theorchard'@'10.10.%' TRIGGER `before_insert_release` BEFORE INSERT ON `releases` FOR EACH ROW
            before_insert_release_block: BEGIN
                DECLARE vendorId INT DEFAULT NULL;
                DECLARE projectCode VARCHAR(255) DEFAULT NULL;

                -- Set the vendor id.
                SET vendorId = (SELECT v.vendor_id FROM vendor v INNER JOIN artist_info ai ON ai.vendor_id =  v.vendor_id WHERE ai.artist_id = NEW.artist_id);

                -- Execute trigger only when vendor_id is not NULL.                 
                IF(vendorId IS NULL) THEN
                    LEAVE before_insert_release_block;
                END IF;

                -- Set project code as "Vendor Catalog Number" or "UPC"
                -- Check if 'Vendor Catalog Number' is not NULL or blank then projectCode = vendor_catalog_number
                -- else projectCode = upc
                IF(NEW.vendor_catalog_number IS NOT NULL AND TRIM(NEW.vendor_catalog_number) != "") THEN
                    SET projectCode = TRIM(NEW.vendor_catalog_number);
                ELSE
                    SET projectCode = NEW.upc;
                END IF;

                -- Check if combination of project_code, vendor_id and subaccount_id does not exist then insert into project else use existing project id.
                IF ((SELECT COUNT(*) FROM art_relations.project AS p WHERE p.vendor_id = vendorId AND p.subaccount_id = IFNULL(NEW.subaccount_id ,0) AND p.project_code = projectCode) = 0) THEN
                    INSERT IGNORE INTO art_relations.project SET project_code = projectCode, vendor_id = vendorId, subaccount_id = IFNULL(NEW.subaccount_id ,0), project_name = IFNULL(NEW.release_name,'Unnamed Project'), created_date_utc = UTC_TIMESTAMP(), updated_date_utc = UTC_TIMESTAMP();
                END IF;

                SET NEW.project_id = (SELECT project_id FROM art_relations.project AS p WHERE p.vendor_id = vendorId AND p.subaccount_id = IFNULL(NEW.subaccount_id ,0) AND p.project_code = projectCode);
            END before_insert_release_block;;
        </sql>
        <rollback>
            <sql dbms="mysql" endDelimiter=";;" splitStatements="true" stripComments="true">
                USE art_relations;;

                DROP TRIGGER IF EXISTS `before_insert_release`;;
            </sql>
        </rollback>
    </changeSet>
</databaseChangeLog>
