<?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"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
                        http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd">

    <changeSet id="add-cascade-delete-to-foreign-keys-1" author="Ibrahima">
        <comment>Drop existing foreign key constraints and recreate them with CASCADE delete</comment>

        <!-- Drop all existing foreign key constraints -->
        <dropForeignKeyConstraint baseTableName="meter_category" constraintName="fk26q7jqesxesg8d65hj8c9f1gv"/>
        <dropForeignKeyConstraint baseTableName="work_order_category" constraintName="fk29i1j8j23y946usq1eth5qf6a"/>
        <dropForeignKeyConstraint baseTableName="workflow" constraintName="fk2yopr6sxpui8gj22yt1qlot2g"/>
        <dropForeignKeyConstraint baseTableName="work_order_configuration" constraintName="fk3kl0h9w3re1oi0vl5k8rx1ojh"/>
        <dropForeignKeyConstraint baseTableName="meter" constraintName="fk578asjaixmqs7pn07tho2i1pc"/>
        <dropForeignKeyConstraint baseTableName="role" constraintName="fk5vkif568seghq1gpej2f64dne"/>
        <dropForeignKeyConstraint baseTableName="request" constraintName="fk5w6no964jn5lpg4tpeugv8xx7"/>
        <dropForeignKeyConstraint baseTableName="time_category" constraintName="fk87e9ddkvokl4g0d787clik15c"/>
        <dropForeignKeyConstraint baseTableName="work_order" constraintName="fk89batrcg5n0tvewqhad27e8oa"/>
        <dropForeignKeyConstraint baseTableName="general_preferences" constraintName="fk9of1ivg6k1wtws25cck4x7t50"/>
        <dropForeignKeyConstraint baseTableName="company_settings" constraintName="fk_company_settings_ui_configuration"/>
        <dropForeignKeyConstraint baseTableName="custom_sequence" constraintName="fk_custom_sequence_company"/>
        <dropForeignKeyConstraint baseTableName="part" constraintName="fk_part_category"/>
        <dropForeignKeyConstraint baseTableName="part_category" constraintName="fk_part_category_company_settings"/>
        <dropForeignKeyConstraint baseTableName="request" constraintName="fk_request_audio_description"/>
        <dropForeignKeyConstraint baseTableName="subscription_change_request" constraintName="fk_subscription_change_request_company"/>
        <dropForeignKeyConstraint baseTableName="super_account_relation" constraintName="fk_super_account_relation_child_user"/>
        <dropForeignKeyConstraint baseTableName="super_account_relation" constraintName="fk_super_account_relation_super_user"/>
        <dropForeignKeyConstraint baseTableName="ui_configuration" constraintName="fk_ui_configuration_company_settings"/>
        <dropForeignKeyConstraint baseTableName="multi_parts" constraintName="fkam5yy13545on89ahiokjtb59q"/>
        <dropForeignKeyConstraint baseTableName="asset" constraintName="fkbnbckrvy4gleqsugkauihx7d7"/>
        <dropForeignKeyConstraint baseTableName="location" constraintName="fkbxoiqd2lmvk7c3r3qhfoou2py"/>
        <dropForeignKeyConstraint baseTableName="purchase_order_category" constraintName="fkc7wlc4jicpk0243alj8biab6v"/>
        <dropForeignKeyConstraint baseTableName="customer" constraintName="fkcc6lvs1hfb70cc5rjbyq0m8is"/>
        <dropForeignKeyConstraint baseTableName="workflow_action" constraintName="fkd1dqs6sf06v5i8jp26pax02dc"/>
        <dropForeignKeyConstraint baseTableName="task_base" constraintName="fkd4mq9o4l0yvmwa8n913k8xmei"/>
        <dropForeignKeyConstraint baseTableName="own_user" constraintName="fkedmmabpmsf25ut5ak07i1rban"/>
        <dropForeignKeyConstraint baseTableName="task_option" constraintName="fkepxf7nnly1w2n7w9c4wj9w68m"/>
        <dropForeignKeyConstraint baseTableName="deprecation" constraintName="fkfcqj01lp3ibnkgsmym76tx1hh"/>
        <dropForeignKeyConstraint baseTableName="work_order_meter_trigger" constraintName="fkmlswjhdj6yvdr0gxttjbivans"/>
        <dropForeignKeyConstraint baseTableName="purchase_order" constraintName="fknhrkwmvmqly4yq8isdbsbs6mc"/>
        <dropForeignKeyConstraint baseTableName="company_settings" constraintName="fkokimhprb4eh1c0d48brd1fdaa"/>
        <dropForeignKeyConstraint baseTableName="work_order_request_configuration" constraintName="fkow32v30lf3pnb8wnvp5lqst0w"/>
        <dropForeignKeyConstraint baseTableName="team" constraintName="fkq7becd703i1w0ry1jxy15qxid"/>
        <dropForeignKeyConstraint baseTableName="part_quantity" constraintName="fkqipxpeva75fa76890xnl4u0fx"/>
        <dropForeignKeyConstraint baseTableName="vendor" constraintName="fksfx6gf0an0bo7kwscuhi1hoya"/>
        <dropForeignKeyConstraint baseTableName="part" constraintName="fkthru5degka2ss0r44n7uphvoj"/>
        <dropForeignKeyConstraint baseTableName="relation" constraintName="fktka3m8kybt9riu4x4no4vwat0"/>
        <dropForeignKeyConstraint baseTableName="asset_downtime" constraintName="fktm1akp965a93k4gdxg1st9rfi"/>
        <dropForeignKeyConstraint baseTableName="labor" constraintName="fkfqjl9rhhuh45t4tyuo7i5qys9"/>
        <dropForeignKeyConstraint baseTableName="company" constraintName="fkfv376ws8n2akfbxvagtxbkiu2"/>
        <dropForeignKeyConstraint baseTableName="part_consumption" constraintName="fkib1h4krpiuuk1meixq7qf9g86"/>
        <dropForeignKeyConstraint baseTableName="preventive_maintenance" constraintName="fkibhc2hvq2hfbom3rwxu7pfxw0"/>
        <dropForeignKeyConstraint baseTableName="file" constraintName="fkipblk8l80i440v7n7be1gnyet"/>
        <dropForeignKeyConstraint baseTableName="workflow_condition" constraintName="fkjus3y7kh66dyo0ryefx02iqx3"/>
        <dropForeignKeyConstraint baseTableName="cost_category" constraintName="fkkbgeqfdaesfnsrbf0vxfdho6t"/>
        <dropForeignKeyConstraint baseTableName="checklist" constraintName="fkkffakgosiaa46j512a564wkpd"/>
        <dropForeignKeyConstraint baseTableName="task" constraintName="fkkovhsjug063l45ggbgdfxp21s"/>
        <dropForeignKeyConstraint baseTableName="asset_category" constraintName="fklj3296bvmjcd0xlho5feip44a"/>
    </changeSet>

    <changeSet id="add-cascade-delete-to-foreign-keys-2" author="Ibrahima">
        <comment>Recreate foreign key constraints with CASCADE delete</comment>

        <!-- Foreign keys referencing company_settings -->
        <addForeignKeyConstraint
                baseTableName="meter_category"
                baseColumnNames="company_settings_id"
                referencedTableName="company_settings"
                referencedColumnNames="id"
                constraintName="fk26q7jqesxesg8d65hj8c9f1gv"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="work_order_category"
                baseColumnNames="company_settings_id"
                referencedTableName="company_settings"
                referencedColumnNames="id"
                constraintName="fk29i1j8j23y946usq1eth5qf6a"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="work_order_configuration"
                baseColumnNames="company_settings_id"
                referencedTableName="company_settings"
                referencedColumnNames="id"
                constraintName="fk3kl0h9w3re1oi0vl5k8rx1ojh"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="role"
                baseColumnNames="company_settings_id"
                referencedTableName="company_settings"
                referencedColumnNames="id"
                constraintName="fk5vkif568seghq1gpej2f64dne"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="time_category"
                baseColumnNames="company_settings_id"
                referencedTableName="company_settings"
                referencedColumnNames="id"
                constraintName="fk87e9ddkvokl4g0d787clik15c"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="general_preferences"
                baseColumnNames="company_settings_id"
                referencedTableName="company_settings"
                referencedColumnNames="id"
                constraintName="fk9of1ivg6k1wtws25cck4x7t50"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="part_category"
                baseColumnNames="company_settings_id"
                referencedTableName="company_settings"
                referencedColumnNames="id"
                constraintName="fk_part_category_company_settings"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="ui_configuration"
                baseColumnNames="company_settings_id"
                referencedTableName="company_settings"
                referencedColumnNames="id"
                constraintName="fk_ui_configuration_company_settings"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="purchase_order_category"
                baseColumnNames="company_settings_id"
                referencedTableName="company_settings"
                referencedColumnNames="id"
                constraintName="fkc7wlc4jicpk0243alj8biab6v"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="work_order_request_configuration"
                baseColumnNames="company_settings_id"
                referencedTableName="company_settings"
                referencedColumnNames="id"
                constraintName="fkow32v30lf3pnb8wnvp5lqst0w"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="cost_category"
                baseColumnNames="company_settings_id"
                referencedTableName="company_settings"
                referencedColumnNames="id"
                constraintName="fkkbgeqfdaesfnsrbf0vxfdho6t"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="checklist"
                baseColumnNames="company_settings_id"
                referencedTableName="company_settings"
                referencedColumnNames="id"
                constraintName="fkkffakgosiaa46j512a564wkpd"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="asset_category"
                baseColumnNames="company_settings_id"
                referencedTableName="company_settings"
                referencedColumnNames="id"
                constraintName="fklj3296bvmjcd0xlho5feip44a"
                onDelete="CASCADE"/>

        <!-- Foreign keys referencing company -->
        <addForeignKeyConstraint
                baseTableName="workflow"
                baseColumnNames="company_id"
                referencedTableName="company"
                referencedColumnNames="id"
                constraintName="fk2yopr6sxpui8gj22yt1qlot2g"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="meter"
                baseColumnNames="company_id"
                referencedTableName="company"
                referencedColumnNames="id"
                constraintName="fk578asjaixmqs7pn07tho2i1pc"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="request"
                baseColumnNames="company_id"
                referencedTableName="company"
                referencedColumnNames="id"
                constraintName="fk5w6no964jn5lpg4tpeugv8xx7"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="work_order"
                baseColumnNames="company_id"
                referencedTableName="company"
                referencedColumnNames="id"
                constraintName="fk89batrcg5n0tvewqhad27e8oa"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="custom_sequence"
                baseColumnNames="company_id"
                referencedTableName="company"
                referencedColumnNames="id"
                constraintName="fk_custom_sequence_company"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="subscription_change_request"
                baseColumnNames="company_id"
                referencedTableName="company"
                referencedColumnNames="id"
                constraintName="fk_subscription_change_request_company"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="multi_parts"
                baseColumnNames="company_id"
                referencedTableName="company"
                referencedColumnNames="id"
                constraintName="fkam5yy13545on89ahiokjtb59q"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="asset"
                baseColumnNames="company_id"
                referencedTableName="company"
                referencedColumnNames="id"
                constraintName="fkbnbckrvy4gleqsugkauihx7d7"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="location"
                baseColumnNames="company_id"
                referencedTableName="company"
                referencedColumnNames="id"
                constraintName="fkbxoiqd2lmvk7c3r3qhfoou2py"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="customer"
                baseColumnNames="company_id"
                referencedTableName="company"
                referencedColumnNames="id"
                constraintName="fkcc6lvs1hfb70cc5rjbyq0m8is"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="workflow_action"
                baseColumnNames="company_id"
                referencedTableName="company"
                referencedColumnNames="id"
                constraintName="fkd1dqs6sf06v5i8jp26pax02dc"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="task_base"
                baseColumnNames="company_id"
                referencedTableName="company"
                referencedColumnNames="id"
                constraintName="fkd4mq9o4l0yvmwa8n913k8xmei"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="own_user"
                baseColumnNames="company_id"
                referencedTableName="company"
                referencedColumnNames="id"
                constraintName="fkedmmabpmsf25ut5ak07i1rban"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="task_option"
                baseColumnNames="company_id"
                referencedTableName="company"
                referencedColumnNames="id"
                constraintName="fkepxf7nnly1w2n7w9c4wj9w68m"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="deprecation"
                baseColumnNames="company_id"
                referencedTableName="company"
                referencedColumnNames="id"
                constraintName="fkfcqj01lp3ibnkgsmym76tx1hh"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="work_order_meter_trigger"
                baseColumnNames="company_id"
                referencedTableName="company"
                referencedColumnNames="id"
                constraintName="fkmlswjhdj6yvdr0gxttjbivans"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="purchase_order"
                baseColumnNames="company_id"
                referencedTableName="company"
                referencedColumnNames="id"
                constraintName="fknhrkwmvmqly4yq8isdbsbs6mc"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="company_settings"
                baseColumnNames="company_id"
                referencedTableName="company"
                referencedColumnNames="id"
                constraintName="fkokimhprb4eh1c0d48brd1fdaa"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="team"
                baseColumnNames="company_id"
                referencedTableName="company"
                referencedColumnNames="id"
                constraintName="fkq7becd703i1w0ry1jxy15qxid"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="part_quantity"
                baseColumnNames="company_id"
                referencedTableName="company"
                referencedColumnNames="id"
                constraintName="fkqipxpeva75fa76890xnl4u0fx"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="vendor"
                baseColumnNames="company_id"
                referencedTableName="company"
                referencedColumnNames="id"
                constraintName="fksfx6gf0an0bo7kwscuhi1hoya"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="part"
                baseColumnNames="company_id"
                referencedTableName="company"
                referencedColumnNames="id"
                constraintName="fkthru5degka2ss0r44n7uphvoj"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="relation"
                baseColumnNames="company_id"
                referencedTableName="company"
                referencedColumnNames="id"
                constraintName="fktka3m8kybt9riu4x4no4vwat0"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="asset_downtime"
                baseColumnNames="company_id"
                referencedTableName="company"
                referencedColumnNames="id"
                constraintName="fktm1akp965a93k4gdxg1st9rfi"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="labor"
                baseColumnNames="company_id"
                referencedTableName="company"
                referencedColumnNames="id"
                constraintName="fkfqjl9rhhuh45t4tyuo7i5qys9"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="part_consumption"
                baseColumnNames="company_id"
                referencedTableName="company"
                referencedColumnNames="id"
                constraintName="fkib1h4krpiuuk1meixq7qf9g86"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="preventive_maintenance"
                baseColumnNames="company_id"
                referencedTableName="company"
                referencedColumnNames="id"
                constraintName="fkibhc2hvq2hfbom3rwxu7pfxw0"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="file"
                baseColumnNames="company_id"
                referencedTableName="company"
                referencedColumnNames="id"
                constraintName="fkipblk8l80i440v7n7be1gnyet"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="workflow_condition"
                baseColumnNames="company_id"
                referencedTableName="company"
                referencedColumnNames="id"
                constraintName="fkjus3y7kh66dyo0ryefx02iqx3"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="task"
                baseColumnNames="company_id"
                referencedTableName="company"
                referencedColumnNames="id"
                constraintName="fkkovhsjug063l45ggbgdfxp21s"
                onDelete="CASCADE"/>

        <!-- Other foreign keys -->
        <addForeignKeyConstraint
                baseTableName="company_settings"
                baseColumnNames="ui_configuration_id"
                referencedTableName="ui_configuration"
                referencedColumnNames="id"
                constraintName="fk_company_settings_ui_configuration"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="part"
                baseColumnNames="category_id"
                referencedTableName="part_category"
                referencedColumnNames="id"
                constraintName="fk_part_category"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="request"
                baseColumnNames="audio_description_id"
                referencedTableName="file"
                referencedColumnNames="id"
                constraintName="fk_request_audio_description"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="super_account_relation"
                baseColumnNames="child_user_id"
                referencedTableName="own_user"
                referencedColumnNames="id"
                constraintName="fk_super_account_relation_child_user"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="super_account_relation"
                baseColumnNames="super_user_id"
                referencedTableName="own_user"
                referencedColumnNames="id"
                constraintName="fk_super_account_relation_super_user"
                onDelete="CASCADE"/>

        <addForeignKeyConstraint
                baseTableName="company"
                baseColumnNames="company_settings_id"
                referencedTableName="company_settings"
                referencedColumnNames="id"
                constraintName="fkfv376ws8n2akfbxvagtxbkiu2"
                onDelete="CASCADE"/>
    </changeSet>

</databaseChangeLog>