<?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="3" author="jchung">
        <sql dbms="mysql" endDelimiter=";;" splitStatements="true" stripComments="true">
        <![CDATA[
            USE art_relations;;

            DROP PROCEDURE IF EXISTS `sp_insert_and_get_project`;;

            CREATE DEFINER='theorchard'@'10.10.%' PROCEDURE `sp_insert_and_get_project`(IN vendorId INT, IN subaccountId INT, IN vendorCatalogNumber VARCHAR(20), IN upc BIGINT, IN releaseName VARCHAR(255), IN artistId INT, OUT projectId BIGINT(10))
            BEGIN 
                DECLARE projectCode VARCHAR(255) DEFAULT NULL;

                IF (vendorId > 0 AND upc > 0) THEN
                    -- If project_id is blank in releases table then create assigned project_id of newly created project.
                    IF (vendorCatalogNumber IS NOT NULL AND TRIM(vendorCatalogNumber) != "") THEN
                        SET projectCode = vendorCatalogNumber;
                    ELSE
                        SET projectCode = 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(subaccountId ,0) AND p.project_code = projectCode) = 0) THEN
                        INSERT IGNORE INTO `art_relations`.`project`
                        SET project_name = IFNULL(releaseName,'Unnamed Project'),
                            project_code = projectCode,
                            vendor_id = vendorId,
                            subaccount_id = IFNULL(subaccountId, 0),
                            artist_id = artistId,
                            created_date_utc = UTC_TIMESTAMP(),
                            updated_date_utc = UTC_TIMESTAMP();
                    END IF;

                    SELECT project_id INTO projectId FROM art_relations.project AS p WHERE p.vendor_id = vendorId AND p.subaccount_id = IFNULL(subaccountId, 0) AND p.project_code = projectCode;
                ELSE
                    SELECT 0 INTO projectId;
                END IF;
            END;;
        ]]>
        </sql>
        <rollback>
            <sql dbms="mysql" endDelimiter=";;" splitStatements="true" stripComments="true">
            <![CDATA[
                USE art_relations;;
 
                DROP PROCEDURE IF EXISTS `sp_insert_and_get_project`;;
            ]]>     
            </sql>
         </rollback>
     </changeSet>
</databaseChangeLog>
