<databaseChangeLog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
    xsi:schemaLocation="
            http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">

    <property name="cmUserIdLength" value="1024" dbms="postgresql,oracle"/>
    <property name="cmUserIdLength" value="255" dbms="mysql,mssql"/>

    <property name="cmRoleNameLength" value="1024" dbms="postgresql,oracle"/>
    <property name="cmRoleNameLength" value="255" dbms="mysql,mssql"/>

    <changeSet id="01-create-dashboard-table" author="marst">
        <createTable tableName="acm_dashboard">
            <column name="cm_dashboard_id" type="${idType}">
                <constraints primaryKey="true" primaryKeyName="pk_dashboard"/>
            </column>
            <column name="cm_dashboard_config" type="VARCHAR(3900)" defaultValue="ACTIVE">
                <constraints nullable="false"/>
            </column>
            <column name="cm_dashboard_owner" type="VARCHAR(${cmUserIdLength})">
                <constraints nullable="false"/>
            </column>
        </createTable>

        <createIndex tableName="acm_dashboard" indexName="idx_dashboard_owner">
            <column name="cm_dashboard_owner"/>
        </createIndex>

    </changeSet>

    <changeSet id="02-create-widget-tables" author="marst">
        <createTable tableName="acm_widget">
            <column name="cm_widget_id" type="${idType}">
                <constraints primaryKey="true" primaryKeyName="pk_widget"/>
            </column>
            <column name="cm_widget_name" type="VARCHAR(256)" defaultValue="ACTIVE">
                <constraints nullable="false"/>
            </column>
        </createTable>

        <createTable tableName="acm_widget_role">
            <column name="cm_widget_id" type="${idType}">
                <constraints nullable="false"/>
            </column>
            <column name="cm_role_name" type="VARCHAR(${cmRoleNameLength})">
                <constraints nullable="false"/>
            </column>
        </createTable>
    </changeSet>

    <changeSet id="03-acm_dashboard-id" author="nebojsha.davidovikj">
        <createTable tableName="acm_dashboard_id">
            <column name="cm_seq_num" type="${idType}"/>
            <column name="cm_seq_name" type="VARCHAR(255)"/>
        </createTable>
        <insert tableName="acm_dashboard_id">
            <column name="cm_seq_num" value="100"></column>
            <column name="cm_seq_name" value="acm_dashboard"></column>
        </insert>
    </changeSet>
    <changeSet id="04-acm_widget-id" author="nebojsha.davidovikj">
        <createTable tableName="acm_widget_id">
            <column name="cm_seq_num" type="${idType}"/>
            <column name="cm_seq_name" type="VARCHAR(255)"/>
        </createTable>
        <insert tableName="acm_widget_id">
            <column name="cm_seq_num" value="100"></column>
            <column name="cm_seq_name" value="acm_widget"></column>
        </insert>
    </changeSet>

    <changeSet id="05-create-module-name-column" author="manoj.dhungana">
        <addColumn tableName="acm_dashboard">
            <column name="cm_module_name" type="VARCHAR(255)" defaultValue="DASHBOARD">
                <constraints nullable="false"/>
            </column>
        </addColumn>
    </changeSet>

    <changeSet id="06-create-module-and-user-preference-tables" author="marst">

        <addColumn tableName="acm_dashboard">
            <column name="cm_module_config_collapsed" type="VARCHAR(16)" defaultValue="false">
                <constraints nullable="false"/>
            </column>
        </addColumn>

        <createTable tableName="acm_module">
            <column name="cm_module_id" type="${idType}">
                <constraints primaryKey="true" primaryKeyName="pk_module"/>
            </column>
            <column name="cm_module_name" type="VARCHAR(255)"/>
        </createTable>

        <createTable tableName="acm_module_id">
            <column name="cm_seq_num" type="${idType}"/>
            <column name="cm_seq_name" type="VARCHAR(255)"/>
        </createTable>
        <insert tableName="acm_module_id">
            <column name="cm_seq_num" value="100"></column>
            <column name="cm_seq_name" value="acm_module"></column>
        </insert>

        <createTable tableName="acm_user_preference">
            <column name="cm_user_preference_id" type="${idType}">
                <constraints primaryKey="true" primaryKeyName="pk_user_preference"/>
            </column>
            <column name="cm_user" type="VARCHAR(${cmUserIdLength})"/>
            <column name="cm_module" type="${idType}"/>
            <column name="cm_widget" type="${idType}"/>
        </createTable>

        <createTable tableName="acm_user_preference_id">
            <column name="cm_seq_num" type="${idType}"/>
            <column name="cm_seq_name" type="VARCHAR(255)"/>
        </createTable>
        <insert tableName="acm_user_preference_id">
            <column name="cm_seq_num" value="100"></column>
            <column name="cm_seq_name" value="acm_user_preference"></column>
        </insert>

    </changeSet>

    <changeSet id="07-widen-dashboard_config-column" author="jovan.ivanovski" dbms="mysql">
        <modifyDataType tableName="acm_dashboard" columnName="cm_dashboard_config" newDataType="TEXT"/>
    </changeSet>

    <changeSet id="07-widen-dashboard_config-column" author="jovan.ivanovski" dbms="mssql,oracle,postgresql">
        <modifyDataType tableName="acm_dashboard" columnName="cm_dashboard_config" newDataType="VARCHAR(4000)"/>
    </changeSet>
</databaseChangeLog>

