<?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="1" author="mdadhania">
        <sql dbms="mysql" endDelimiter=";;" splitStatements="true" stripComments="true">
            <!-- product store mapping controller -->
            INSERT INTO orchadmin_resources (resource) VALUES ('productstoremapping');;
            SET @resource_id = LAST_INSERT_ID();;

            <!-- Edit action -->
            INSERT INTO orchadmin_privileges (privilege) VALUES ('edit');;
            SET @edit_privilege_id = LAST_INSERT_ID();;

            INSERT INTO orchadmin_permissions
                (orchadmin_resource_id, orchadmin_privilege_id, description)
            VALUES
                (@resource_id, @edit_privilege_id, 'Edit Store Mapping');;

            <!-- Save action -->
            INSERT INTO orchadmin_privileges (privilege) VALUES ('save');;
            SET @save_privilege_id = LAST_INSERT_ID();;

            INSERT INTO orchadmin_permissions
                (orchadmin_resource_id, orchadmin_privilege_id, description)
            VALUES
                (@resource_id, @save_privilege_id, 'Save Store Mapping');;

            <!-- Delete action -->
            INSERT INTO orchadmin_privileges (privilege) VALUES ('delete');;
            SET @delete_privilege_id = LAST_INSERT_ID();;

            INSERT INTO orchadmin_permissions
                (orchadmin_resource_id, orchadmin_privilege_id, description)
            VALUES
                (@resource_id, @delete_privilege_id, 'Delete Store Mapping');;
        </sql>
        <rollback>
            SET @resource_id = (SELECT orchadmin_resource_id FROM orchadmin_resources WHERE resource = 'productstoremapping');;

            <!-- Edit action -->
            SET @edit_privilege_id = (SELECT oprv.orchadmin_privilege_id
                FROM orchadmin_privileges oprv 
                INNER JOIN orchadmin_permissions oper ON oprv.orchadmin_privilege_id = oper.orchadmin_privilege_id 
                WHERE oprv.privilege = 'edit' AND oper.orchadmin_resource_id = @resource_id);;

            DELETE FROM orchadmin_permissions WHERE orchadmin_resource_id = @resource_id AND orchadmin_privilege_id = @edit_privilege_id;;
            DELETE FROM orchadmin_privileges WHERE orchadmin_privilege_id = @edit_privilege_id;;

            <!-- Save action -->
            SET @save_privilege_id = (SELECT oprv.orchadmin_privilege_id
                FROM orchadmin_privileges oprv 
                INNER JOIN orchadmin_permissions oper ON oprv.orchadmin_privilege_id = oper.orchadmin_privilege_id 
                WHERE oprv.privilege = 'save' AND oper.orchadmin_resource_id = @resource_id);;

            DELETE FROM orchadmin_permissions WHERE orchadmin_resource_id = @resource_id AND orchadmin_privilege_id = @save_privilege_id;;
            DELETE FROM orchadmin_privileges WHERE orchadmin_privilege_id = @save_privilege_id;;

            <!-- Delete action -->
            SET @delete_privilege_id = (SELECT oprv.orchadmin_privilege_id
                FROM orchadmin_privileges oprv 
                INNER JOIN orchadmin_permissions oper ON oprv.orchadmin_privilege_id = oper.orchadmin_privilege_id 
                WHERE oprv.privilege = 'delete' AND oper.orchadmin_resource_id = @resource_id);;

            DELETE FROM orchadmin_permissions WHERE orchadmin_resource_id = @resource_id AND orchadmin_privilege_id = @delete_privilege_id;;
            DELETE FROM orchadmin_privileges WHERE orchadmin_privilege_id = @delete_privilege_id;;

            <!-- product store mapping controller -->
            DELETE FROM orchadmin_resources WHERE resource = 'productstoremapping';;
        </rollback>
    </changeSet>
</databaseChangeLog>
