<?xml version="1.0"?>
<!--
/**
 * Copyright © Zhik. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Setup/Declaration/Schema/etc/schema.xsd">
    <!-- Dealer Locations Table -->
    <table name="zhik_dealer_locations" resource="default" engine="innodb" comment="Dealer Locations Table">
        <column xsi:type="int" name="location_id" unsigned="true" nullable="false" identity="true" comment="Location ID"/>
        <column xsi:type="int" name="customer_id" unsigned="true" nullable="false" comment="Customer ID"/>
        <column xsi:type="int" name="parent_id" unsigned="true" nullable="true" comment="Parent Location ID for versioning"/>
        <column xsi:type="varchar" name="name" nullable="false" length="255" comment="Location Name"/>
        <column xsi:type="varchar" name="address" nullable="false" length="255" comment="Street Address"/>
        <column xsi:type="varchar" name="city" nullable="false" length="100" comment="City"/>
        <column xsi:type="varchar" name="state" nullable="true" length="100" comment="State/Province"/>
        <column xsi:type="varchar" name="postal_code" nullable="false" length="20" comment="Postal Code"/>
        <column xsi:type="varchar" name="country" nullable="false" length="2" comment="Country Code"/>
        <column xsi:type="decimal" name="latitude" scale="8" precision="10" unsigned="false" nullable="true" comment="Latitude"/>
        <column xsi:type="decimal" name="longitude" scale="8" precision="11" unsigned="false" nullable="true" comment="Longitude"/>
        <column xsi:type="varchar" name="phone" nullable="false" length="50" comment="Phone Number"/>
        <column xsi:type="varchar" name="email" nullable="false" length="255" comment="Email Address"/>
        <column xsi:type="varchar" name="website" nullable="true" length="255" comment="Website URL"/>
        <column xsi:type="text" name="hours" nullable="true" comment="Business Hours"/>
        <column xsi:type="text" name="description" nullable="true" comment="Location Description"/>
        <column xsi:type="varchar" name="image_url" nullable="true" length="255" comment="Location Image URL"/>
        <column xsi:type="varchar" name="status" nullable="false" length="20" default="pending" comment="Status: pending, approved, rejected, pending_deletion"/>
        <column xsi:type="text" name="rejection_reason" nullable="true" comment="Rejection Reason"/>
        <column xsi:type="boolean" name="is_latest" nullable="false" default="true" comment="Is Latest Version"/>
        <column xsi:type="timestamp" name="created_at" on_update="false" nullable="false" default="CURRENT_TIMESTAMP" comment="Created At"/>
        <column xsi:type="timestamp" name="updated_at" on_update="true" nullable="false" default="CURRENT_TIMESTAMP" comment="Updated At"/>
        <column xsi:type="timestamp" name="approved_at" on_update="false" nullable="true" comment="Approved At"/>
        <column xsi:type="int" name="approved_by" unsigned="true" nullable="true" comment="Admin User ID who approved"/>
        <column xsi:type="varchar" name="ip_address" nullable="true" length="45" comment="IP Address"/>
        <constraint xsi:type="primary" referenceId="PRIMARY">
            <column name="location_id"/>
        </constraint>
        <constraint xsi:type="foreign" referenceId="ZHIK_DEALER_LOCATIONS_CUSTOMER_ID_CUSTOMER_ENTITY_ENTITY_ID" 
                    table="zhik_dealer_locations" column="customer_id" referenceTable="customer_entity" referenceColumn="entity_id" onDelete="CASCADE"/>
        <constraint xsi:type="foreign" referenceId="ZHIK_DEALER_LOCATIONS_PARENT_ID_ZHIK_DEALER_LOCATIONS_LOCATION_ID" 
                    table="zhik_dealer_locations" column="parent_id" referenceTable="zhik_dealer_locations" referenceColumn="location_id" onDelete="SET NULL"/>
        <constraint xsi:type="foreign" referenceId="ZHIK_DEALER_LOCATIONS_APPROVED_BY_ADMIN_USER_USER_ID" 
                    table="zhik_dealer_locations" column="approved_by" referenceTable="admin_user" referenceColumn="user_id" onDelete="SET NULL"/>
        <index referenceId="ZHIK_DEALER_LOCATIONS_CUSTOMER_ID" indexType="btree">
            <column name="customer_id"/>
        </index>
        <index referenceId="ZHIK_DEALER_LOCATIONS_STATUS" indexType="btree">
            <column name="status"/>
        </index>
        <index referenceId="ZHIK_DEALER_LOCATIONS_IS_LATEST" indexType="btree">
            <column name="is_latest"/>
        </index>
        <index referenceId="ZHIK_DEALER_LOCATIONS_COORDINATES" indexType="btree">
            <column name="latitude"/>
            <column name="longitude"/>
        </index>
    </table>

    <!-- Dealer Tags Table -->
    <table name="zhik_dealer_tags" resource="default" engine="innodb" comment="Dealer Tags Table">
        <column xsi:type="int" name="tag_id" unsigned="true" nullable="false" identity="true" comment="Tag ID"/>
        <column xsi:type="varchar" name="tag_name" nullable="false" length="100" comment="Tag Name"/>
        <column xsi:type="varchar" name="tag_slug" nullable="false" length="100" comment="Tag Slug"/>
        <column xsi:type="varchar" name="tag_color" nullable="true" length="7" comment="Tag Color (HEX)"/>
        <column xsi:type="varchar" name="tag_icon" nullable="true" length="50" comment="Tag Icon Class"/>
        <column xsi:type="text" name="description" nullable="true" comment="Tag Description"/>
        <column xsi:type="int" name="sort_order" unsigned="true" nullable="false" default="0" comment="Sort Order"/>
        <column xsi:type="boolean" name="is_active" nullable="false" default="true" comment="Is Active"/>
        <column xsi:type="timestamp" name="created_at" on_update="false" nullable="false" default="CURRENT_TIMESTAMP" comment="Created At"/>
        <column xsi:type="timestamp" name="updated_at" on_update="true" nullable="false" default="CURRENT_TIMESTAMP" comment="Updated At"/>
        <constraint xsi:type="primary" referenceId="PRIMARY">
            <column name="tag_id"/>
        </constraint>
        <constraint xsi:type="unique" referenceId="ZHIK_DEALER_TAGS_TAG_SLUG">
            <column name="tag_slug"/>
        </constraint>
        <index referenceId="ZHIK_DEALER_TAGS_IS_ACTIVE" indexType="btree">
            <column name="is_active"/>
        </index>
    </table>

    <!-- Dealer Location Tags Relation Table -->
    <table name="zhik_dealer_location_tags" resource="default" engine="innodb" comment="Dealer Location Tags Relation">
        <column xsi:type="int" name="location_id" unsigned="true" nullable="false" comment="Location ID"/>
        <column xsi:type="int" name="tag_id" unsigned="true" nullable="false" comment="Tag ID"/>
        <constraint xsi:type="primary" referenceId="PRIMARY">
            <column name="location_id"/>
            <column name="tag_id"/>
        </constraint>
        <constraint xsi:type="foreign" referenceId="ZHIK_DEALER_LOCATION_TAGS_LOCATION_ID_ZHIK_DEALER_LOCATIONS_LOCATION_ID" 
                    table="zhik_dealer_location_tags" column="location_id" referenceTable="zhik_dealer_locations" referenceColumn="location_id" onDelete="CASCADE"/>
        <constraint xsi:type="foreign" referenceId="ZHIK_DEALER_LOCATION_TAGS_TAG_ID_ZHIK_DEALER_TAGS_TAG_ID" 
                    table="zhik_dealer_location_tags" column="tag_id" referenceTable="zhik_dealer_tags" referenceColumn="tag_id" onDelete="CASCADE"/>
        <index referenceId="ZHIK_DEALER_LOCATION_TAGS_TAG_ID" indexType="btree">
            <column name="tag_id"/>
        </index>
    </table>
</schema>