-- ============================================================================
-- Hard-delete users (and every row that references them) — VPandit `vpandit`
--
-- WHY A SCRIPT: this schema has ZERO foreign-key constraints, so nothing stops
-- a partial delete from leaving orphans behind. Every reference column is listed
-- explicitly below. Only the IDs you set in STEP 1 are touched.
--
-- HOW TO USE (phpMyAdmin → SQL tab, or mysql CLI)
--   1. Edit STEP 1 — put the user ids there, comma separated.
--   2. Run BLOCK 1 (variables) + BLOCK 2 (dry run). Read the counts.
--   3. Happy? Run BLOCK 3 (backup, optional) and BLOCK 4 (delete) and BLOCK 5.
--   4. Run everything in ONE session — the @variables must stay alive.
--      In phpMyAdmin just select the whole file and press Go.
--
-- Safe to re-run: every statement is scoped to the id list, so a second run
-- deletes 0 rows. FIND_IN_SET() returns NULL for an empty list → matches nothing.
-- ============================================================================


-- ============================================================================
-- BLOCK 1 — variables
-- ============================================================================
-- >>> ONLY LINE YOU NEED TO CHANGE <<<
SET @ids = '17,18,19,20,21,22,23,24,25,27,28,77,81';

-- Derived id sets (NULL when the group is empty — nothing then matches).
SET @pandit_ids       = (SELECT GROUP_CONCAT(id) FROM pandits       WHERE FIND_IN_SET(user_id, @ids));
SET @yajman_ids       = (SELECT GROUP_CONCAT(id) FROM yajmans       WHERE FIND_IN_SET(user_id, @ids));
SET @num_customer_ids = (SELECT GROUP_CONCAT(id) FROM num_customers WHERE FIND_IN_SET(user_id, @ids));

SELECT @ids AS target_user_ids,
       @pandit_ids AS pandit_ids,
       @yajman_ids AS yajman_ids,
       @num_customer_ids AS num_customer_ids;


-- ============================================================================
-- BLOCK 2 — DRY RUN. Read-only: prints how many rows each DELETE would remove.
-- ============================================================================
SELECT 'USERS (master)' AS what, COUNT(*) AS rows_to_delete FROM users WHERE FIND_IN_SET(id, @ids)
UNION ALL SELECT 'yajmans (master)',            COUNT(*) FROM yajmans               WHERE FIND_IN_SET(id, @yajman_ids)
UNION ALL SELECT 'num_customers (master)',      COUNT(*) FROM num_customers         WHERE FIND_IN_SET(id, @num_customer_ids)
UNION ALL SELECT 'pandits (master)',            COUNT(*) FROM pandits               WHERE FIND_IN_SET(id, @pandit_ids)
UNION ALL SELECT 'personal_access_tokens',      COUNT(*) FROM personal_access_tokens WHERE tokenable_type='App\\Models\\User' AND FIND_IN_SET(tokenable_id, @ids)
UNION ALL SELECT 'user_profiles',               COUNT(*) FROM user_profiles         WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'user_documents',              COUNT(*) FROM user_documents        WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'user_packages',               COUNT(*) FROM user_packages         WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'user_category_members',       COUNT(*) FROM user_category_members WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'category_upgrade_requests',   COUNT(*) FROM category_upgrade_requests WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'menu_grants',                 COUNT(*) FROM menu_grants           WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'dashboard_pins',              COUNT(*) FROM dashboard_pins        WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'notifications',               COUNT(*) FROM notifications         WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'coupon_redemptions',          COUNT(*) FROM coupon_redemptions    WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'ai_agents',                   COUNT(*) FROM ai_agents             WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'ai_consults',                 COUNT(*) FROM ai_consults           WHERE FIND_IN_SET(client_user_id, @ids)
UNION ALL SELECT 'ai_consult_messages',         COUNT(*) FROM ai_consult_messages   WHERE FIND_IN_SET(client_user_id, @ids)
UNION ALL SELECT 'astro_chart_cache',           COUNT(*) FROM astro_chart_cache     WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'comm_calls',                  COUNT(*) FROM comm_calls            WHERE FIND_IN_SET(caller_user_id, @ids) OR FIND_IN_SET(callee_user_id, @ids)
UNION ALL SELECT 'comm_conversations',          COUNT(*) FROM comm_conversations    WHERE FIND_IN_SET(client_user_id, @ids)
UNION ALL SELECT 'comm_messages',               COUNT(*) FROM comm_messages         WHERE FIND_IN_SET(sender_user_id, @ids)
UNION ALL SELECT 'comm_signals',                COUNT(*) FROM comm_signals          WHERE FIND_IN_SET(from_user, @ids) OR FIND_IN_SET(to_user, @ids)
UNION ALL SELECT 'consultations',               COUNT(*) FROM consultations         WHERE FIND_IN_SET(client_id, @ids)
UNION ALL SELECT 'consultation_requests',       COUNT(*) FROM consultation_requests WHERE FIND_IN_SET(client_id, @ids)
UNION ALL SELECT 'commission_entries',          COUNT(*) FROM commission_entries    WHERE FIND_IN_SET(client_id, @ids)
UNION ALL SELECT 'booking_leads',               COUNT(*) FROM booking_leads         WHERE FIND_IN_SET(client_user_id, @ids)
UNION ALL SELECT 'booking_orders',              COUNT(*) FROM booking_orders        WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'service_orders',              COUNT(*) FROM service_orders        WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'service_submissions',         COUNT(*) FROM service_submissions   WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'shop_orders',                 COUNT(*) FROM shop_orders           WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'num_consultations',           COUNT(*) FROM num_consultations     WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'num_reading_log',             COUNT(*) FROM num_reading_log       WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'palm_readings',               COUNT(*) FROM palm_readings         WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'panchang_shares',             COUNT(*) FROM panchang_shares       WHERE FIND_IN_SET(shared_by_user_id, @ids)
UNION ALL SELECT 'seva_negotiations',           COUNT(*) FROM seva_negotiations     WHERE FIND_IN_SET(actor_user_id, @ids)
UNION ALL SELECT 'seva_reminders',              COUNT(*) FROM seva_reminders        WHERE FIND_IN_SET(recipient_user_id, @ids)
UNION ALL SELECT 'seva_feedback',               COUNT(*) FROM seva_feedback         WHERE FIND_IN_SET(rater_user_id, @ids)
UNION ALL SELECT 'vendors',                     COUNT(*) FROM vendors               WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'client_profiles',             COUNT(*) FROM client_profiles       WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'group_participants',          COUNT(*) FROM group_participants    WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'invite_templates',            COUNT(*) FROM invite_templates      WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'community_announcement_comments', COUNT(*) FROM community_announcement_comments WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'vastu_plans',                 COUNT(*) FROM vastu_plans           WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'vastu_properties',            COUNT(*) FROM vastu_properties      WHERE FIND_IN_SET(owner_user_id, @ids)
UNION ALL SELECT 'vastu_consultant_clients',    COUNT(*) FROM vastu_consultant_clients WHERE FIND_IN_SET(consultant_user_id, @ids)
UNION ALL SELECT 'jw_charts',                   COUNT(*) FROM jw_charts             WHERE FIND_IN_SET(owner_user_id, @ids)
UNION ALL SELECT 'jw_calc_profiles',            COUNT(*) FROM jw_calc_profiles      WHERE FIND_IN_SET(owner_user_id, @ids)
UNION ALL SELECT 'voice_recordings',            COUNT(*) FROM voice_recordings      WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'voice_client_profiles',       COUNT(*) FROM voice_client_profiles WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'faces',                       COUNT(*) FROM faces                 WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'face_reports',                COUNT(*) FROM face_reports          WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'face_measurements (via faces)', COUNT(*) FROM face_measurements fm JOIN faces f ON fm.face_id = f.face_id WHERE FIND_IN_SET(f.user_id, @ids)
UNION ALL SELECT 'face_traits (via faces)',     COUNT(*) FROM face_traits ft JOIN faces f ON ft.face_id = f.face_id WHERE FIND_IN_SET(f.user_id, @ids)
UNION ALL SELECT 'franchise_territories',       COUNT(*) FROM franchise_territories WHERE FIND_IN_SET(franchise_user_id, @ids)
UNION ALL SELECT 'bookings (yajman)',           COUNT(*) FROM bookings              WHERE FIND_IN_SET(yajman_id, @yajman_ids)
UNION ALL SELECT 'bookings (pandit)',           COUNT(*) FROM bookings              WHERE FIND_IN_SET(pandit_id, @pandit_ids)
UNION ALL SELECT 'seva_exchange (yajman)',      COUNT(*) FROM seva_exchange         WHERE FIND_IN_SET(yajman_id, @yajman_ids)
UNION ALL SELECT 'seva_exchange (pandit)',      COUNT(*) FROM seva_exchange         WHERE FIND_IN_SET(pandit_id, @pandit_ids)
UNION ALL SELECT 'seva_offers (yajman)',        COUNT(*) FROM seva_offers           WHERE FIND_IN_SET(posted_by_yajman_id, @yajman_ids)
UNION ALL SELECT 'pandit_assignments',          COUNT(*) FROM pandit_assignments    WHERE FIND_IN_SET(pandit_id, @pandit_ids) OR FIND_IN_SET(pandit_user_id, @ids)
UNION ALL SELECT 'comm_conversations (pandit)', COUNT(*) FROM comm_conversations    WHERE FIND_IN_SET(pandit_id, @pandit_ids)
UNION ALL SELECT 'comm_calls (pandit)',         COUNT(*) FROM comm_calls            WHERE FIND_IN_SET(pandit_id, @pandit_ids)
UNION ALL SELECT 'consultations (pandit)',      COUNT(*) FROM consultations         WHERE FIND_IN_SET(pandit_id, @pandit_ids)
UNION ALL SELECT 'expert_profiles',             COUNT(*) FROM expert_profiles       WHERE FIND_IN_SET(pandit_id, @pandit_ids)
UNION ALL SELECT 'expert_services',             COUNT(*) FROM expert_services       WHERE FIND_IN_SET(pandit_id, @pandit_ids)
UNION ALL SELECT 'lead_offers',                 COUNT(*) FROM lead_offers           WHERE FIND_IN_SET(pandit_id, @pandit_ids)
UNION ALL SELECT 'ai_agents (pandit)',          COUNT(*) FROM ai_agents             WHERE FIND_IN_SET(pandit_id, @pandit_ids) OR FIND_IN_SET(owner_pandit_id, @pandit_ids);


-- ============================================================================
-- BLOCK 3 — BACKUP (optional, recommended). Uncomment to run.
-- Drop the bk_* tables once you are happy with the result.
-- ============================================================================
-- CREATE TABLE bk_users         AS SELECT * FROM users                   WHERE FIND_IN_SET(id, @ids);
-- CREATE TABLE bk_yajmans       AS SELECT * FROM yajmans                 WHERE FIND_IN_SET(id, @yajman_ids);
-- CREATE TABLE bk_num_customers AS SELECT * FROM num_customers           WHERE FIND_IN_SET(id, @num_customer_ids);
-- CREATE TABLE bk_pandits       AS SELECT * FROM pandits                 WHERE FIND_IN_SET(id, @pandit_ids);
-- CREATE TABLE bk_tokens        AS SELECT * FROM personal_access_tokens  WHERE tokenable_type='App\\Models\\User' AND FIND_IN_SET(tokenable_id, @ids);
-- CREATE TABLE bk_user_profiles      AS SELECT * FROM user_profiles       WHERE FIND_IN_SET(user_id, @ids);
-- CREATE TABLE bk_user_documents     AS SELECT * FROM user_documents      WHERE FIND_IN_SET(user_id, @ids);
-- CREATE TABLE bk_user_packages      AS SELECT * FROM user_packages       WHERE FIND_IN_SET(user_id, @ids);
-- CREATE TABLE bk_user_category      AS SELECT * FROM user_category_members WHERE FIND_IN_SET(user_id, @ids);
-- CREATE TABLE bk_upgrade_requests   AS SELECT * FROM category_upgrade_requests WHERE FIND_IN_SET(user_id, @ids);
-- CREATE TABLE bk_comm_messages      AS SELECT * FROM comm_messages       WHERE FIND_IN_SET(sender_user_id, @ids);
-- CREATE TABLE bk_comm_signals       AS SELECT * FROM comm_signals        WHERE FIND_IN_SET(from_user, @ids) OR FIND_IN_SET(to_user, @ids);
-- CREATE TABLE bk_comm_calls         AS SELECT * FROM comm_calls          WHERE FIND_IN_SET(caller_user_id, @ids) OR FIND_IN_SET(callee_user_id, @ids);
-- CREATE TABLE bk_comm_conversations AS SELECT * FROM comm_conversations  WHERE FIND_IN_SET(client_user_id, @ids);
-- CREATE TABLE bk_bookings           AS SELECT * FROM bookings            WHERE FIND_IN_SET(yajman_id, @yajman_ids) OR FIND_IN_SET(pandit_id, @pandit_ids);
-- CREATE TABLE bk_seva_exchange      AS SELECT * FROM seva_exchange       WHERE FIND_IN_SET(yajman_id, @yajman_ids) OR FIND_IN_SET(pandit_id, @pandit_ids);
-- CREATE TABLE bk_faces              AS SELECT * FROM faces               WHERE FIND_IN_SET(user_id, @ids);


-- ============================================================================
-- BLOCK 4 — DELETE. Child rows first, masters last.
-- ============================================================================

-- 4a. pandit-scoped rows
DELETE FROM expert_profiles          WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM expert_services          WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM expert_languages         WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM expert_qualifications    WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM expert_ratings           WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM expert_reviews           WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM expert_queue             WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM expert_schedule          WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM expert_schedule_exceptions WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM expert_date_override     WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM expert_invoices          WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM expert_notifications     WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM expert_online_log        WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM expert_live_status       WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM expert_subscriptions     WHERE FIND_IN_SET(pandit_id, @pandit_ids);
-- pandit_services.pandit_id is the one VARCHAR id column in this schema
-- (utf8mb4_general_ci) while @pandit_ids is a GROUP_CONCAT string, so both
-- sides are cast+collated explicitly — otherwise MariaDB raises
-- "Illegal mix of collations ... for operation 'find_in_set'".
DELETE FROM pandit_services WHERE FIND_IN_SET(CAST(pandit_id AS CHAR) COLLATE utf8mb4_general_ci, CAST(@pandit_ids AS CHAR) COLLATE utf8mb4_general_ci);
DELETE FROM pandit_presence          WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM pandit_availability      WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM pandit_hour_topups       WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM pandit_comm_sessions     WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM pandit_ai_knowledge      WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM pandit_ai_engagements    WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM comm_usage_ledger        WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM comm_calls               WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM comm_conversations       WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM consultations            WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM consultation_requests    WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM bookings                 WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM booking_orders           WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM booking_order_items      WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM booking_leads            WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM booking_leads            WHERE FIND_IN_SET(awarded_pandit_id, @pandit_ids);
DELETE FROM lead_offers              WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM seva_exchange            WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM seva_assignments         WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM seva_activity            WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM seva_responses           WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM seva_feedback            WHERE FIND_IN_SET(ratee_pandit_id, @pandit_ids);
DELETE FROM service_bookings         WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM panchang_shares          WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM ai_agents                WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM ai_agents                WHERE FIND_IN_SET(owner_pandit_id, @pandit_ids);

-- 4b. yajman-scoped rows
DELETE FROM bookings                 WHERE FIND_IN_SET(yajman_id, @yajman_ids);
DELETE FROM seva_exchange            WHERE FIND_IN_SET(yajman_id, @yajman_ids);
DELETE FROM seva_offers              WHERE FIND_IN_SET(posted_by_yajman_id, @yajman_ids);

-- 4c. user-scoped rows (every column in this schema that stores a users.id)
DELETE FROM ai_agents                      WHERE FIND_IN_SET(user_id, @ids);
DELETE FROM ai_consults                    WHERE FIND_IN_SET(client_user_id, @ids);
DELETE FROM ai_consult_messages            WHERE FIND_IN_SET(client_user_id, @ids);
DELETE FROM astro_chart_cache              WHERE FIND_IN_SET(user_id, @ids);
DELETE FROM comm_calls                     WHERE FIND_IN_SET(caller_user_id, @ids);
DELETE FROM comm_calls                     WHERE FIND_IN_SET(callee_user_id, @ids);
DELETE FROM comm_conversations             WHERE FIND_IN_SET(client_user_id, @ids);
DELETE FROM comm_messages                  WHERE FIND_IN_SET(sender_user_id, @ids);
DELETE FROM comm_signals                   WHERE FIND_IN_SET(from_user, @ids);
DELETE FROM comm_signals                   WHERE FIND_IN_SET(to_user, @ids);
DELETE FROM consultations                  WHERE FIND_IN_SET(client_id, @ids);
DELETE FROM consultation_requests          WHERE FIND_IN_SET(client_id, @ids);
DELETE FROM commission_entries             WHERE FIND_IN_SET(client_id, @ids);
DELETE FROM expert_queue                   WHERE FIND_IN_SET(client_id, @ids);
DELETE FROM expert_reviews                 WHERE FIND_IN_SET(client_id, @ids);
DELETE FROM jw_charts                      WHERE FIND_IN_SET(client_id, @ids);
DELETE FROM jw_client_notes                WHERE FIND_IN_SET(client_id, @ids);
DELETE FROM jw_consultations               WHERE FIND_IN_SET(client_id, @ids);
DELETE FROM num_consent_log                WHERE FIND_IN_SET(client_id, @ids);
DELETE FROM num_period_assessment          WHERE FIND_IN_SET(client_id, @ids);
DELETE FROM num_reading_log                WHERE FIND_IN_SET(client_id, @ids);
DELETE FROM voice_astro_predictions        WHERE FIND_IN_SET(client_id, @ids);
DELETE FROM voice_recordings               WHERE FIND_IN_SET(client_id, @ids);
DELETE FROM booking_leads                  WHERE FIND_IN_SET(client_user_id, @ids);
DELETE FROM booking_orders                 WHERE FIND_IN_SET(user_id, @ids);
DELETE FROM num_consultations              WHERE FIND_IN_SET(user_id, @ids);
DELETE FROM num_reading_log                WHERE FIND_IN_SET(user_id, @ids);
DELETE FROM palm_readings                  WHERE FIND_IN_SET(user_id, @ids);
DELETE FROM faces                          WHERE FIND_IN_SET(user_id, @ids);
DELETE FROM face_reports                   WHERE FIND_IN_SET(user_id, @ids);
DELETE fm FROM face_measurements fm JOIN faces f ON fm.face_id = f.face_id WHERE FIND_IN_SET(f.user_id, @ids);
DELETE ft FROM face_traits       ft JOIN faces f ON ft.face_id = f.face_id WHERE FIND_IN_SET(f.user_id, @ids);
DELETE FROM pandit_assignments             WHERE FIND_IN_SET(pandit_user_id, @ids);
DELETE FROM pandit_assignments             WHERE FIND_IN_SET(pandit_id, @pandit_ids);
DELETE FROM panchang_shares                WHERE FIND_IN_SET(shared_by_user_id, @ids);
DELETE FROM seva_negotiations              WHERE FIND_IN_SET(actor_user_id, @ids);
DELETE FROM seva_reminders                 WHERE FIND_IN_SET(recipient_user_id, @ids);
DELETE FROM seva_feedback                  WHERE FIND_IN_SET(rater_user_id, @ids);
DELETE FROM service_orders                 WHERE FIND_IN_SET(user_id, @ids);
DELETE FROM service_submissions            WHERE FIND_IN_SET(user_id, @ids);
DELETE FROM shop_orders                    WHERE FIND_IN_SET(user_id, @ids);
DELETE FROM user_profiles                  WHERE FIND_IN_SET(user_id, @ids);
DELETE FROM user_documents                 WHERE FIND_IN_SET(user_id, @ids);
DELETE FROM user_packages                  WHERE FIND_IN_SET(user_id, @ids);
DELETE FROM user_category_members          WHERE FIND_IN_SET(user_id, @ids);
DELETE FROM category_upgrade_requests      WHERE FIND_IN_SET(user_id, @ids);
DELETE FROM menu_grants                    WHERE FIND_IN_SET(user_id, @ids);
DELETE FROM dashboard_pins                 WHERE FIND_IN_SET(user_id, @ids);
DELETE FROM notifications                  WHERE FIND_IN_SET(user_id, @ids);
DELETE FROM coupon_redemptions             WHERE FIND_IN_SET(user_id, @ids);
DELETE FROM community_announcement_comments WHERE FIND_IN_SET(user_id, @ids);
DELETE FROM group_participants             WHERE FIND_IN_SET(user_id, @ids);
DELETE FROM invite_templates               WHERE FIND_IN_SET(user_id, @ids);
DELETE FROM vastu_plans                    WHERE FIND_IN_SET(user_id, @ids);
DELETE FROM vastu_properties               WHERE FIND_IN_SET(owner_user_id, @ids);
DELETE FROM vastu_consultant_clients       WHERE FIND_IN_SET(consultant_user_id, @ids);
DELETE FROM jw_charts                      WHERE FIND_IN_SET(owner_user_id, @ids);
DELETE FROM jw_calc_profiles               WHERE FIND_IN_SET(owner_user_id, @ids);
DELETE FROM vendors                        WHERE FIND_IN_SET(user_id, @ids);
DELETE FROM client_profiles                WHERE FIND_IN_SET(user_id, @ids);
DELETE FROM voice_recordings               WHERE FIND_IN_SET(user_id, @ids);
DELETE FROM voice_client_profiles          WHERE FIND_IN_SET(user_id, @ids);

-- 4d. masters (last)
DELETE FROM franchise_territories   WHERE FIND_IN_SET(franchise_user_id, @ids);
DELETE FROM num_customers           WHERE FIND_IN_SET(id, @num_customer_ids);
DELETE FROM yajmans                 WHERE FIND_IN_SET(id, @yajman_ids);
DELETE FROM pandits                 WHERE FIND_IN_SET(id, @pandit_ids);
DELETE FROM personal_access_tokens  WHERE tokenable_type='App\\Models\\User' AND FIND_IN_SET(tokenable_id, @ids);
DELETE FROM users                   WHERE FIND_IN_SET(id, @ids);


-- ============================================================================
-- BLOCK 5 — VERIFY. Every number must be 0.
-- ============================================================================
SELECT 'users' AS what, COUNT(*) AS left_over FROM users WHERE FIND_IN_SET(id, @ids)
UNION ALL SELECT 'yajmans',              COUNT(*) FROM yajmans               WHERE FIND_IN_SET(id, @yajman_ids)
UNION ALL SELECT 'pandits',              COUNT(*) FROM pandits               WHERE FIND_IN_SET(id, @pandit_ids)
UNION ALL SELECT 'num_customers',        COUNT(*) FROM num_customers         WHERE FIND_IN_SET(id, @num_customer_ids)
UNION ALL SELECT 'tokens',               COUNT(*) FROM personal_access_tokens WHERE tokenable_type='App\\Models\\User' AND FIND_IN_SET(tokenable_id, @ids)
UNION ALL SELECT 'user_profiles',        COUNT(*) FROM user_profiles         WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'user_documents',       COUNT(*) FROM user_documents        WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'user_packages',        COUNT(*) FROM user_packages         WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'user_category_members',COUNT(*) FROM user_category_members WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'upgrade_requests',     COUNT(*) FROM category_upgrade_requests WHERE FIND_IN_SET(user_id, @ids)
UNION ALL SELECT 'comm_messages',        COUNT(*) FROM comm_messages         WHERE FIND_IN_SET(sender_user_id, @ids)
UNION ALL SELECT 'comm_signals',         COUNT(*) FROM comm_signals          WHERE FIND_IN_SET(from_user, @ids) OR FIND_IN_SET(to_user, @ids)
UNION ALL SELECT 'comm_calls',           COUNT(*) FROM comm_calls            WHERE FIND_IN_SET(caller_user_id, @ids) OR FIND_IN_SET(callee_user_id, @ids)
UNION ALL SELECT 'comm_conversations',   COUNT(*) FROM comm_conversations    WHERE FIND_IN_SET(client_user_id, @ids)
UNION ALL SELECT 'bookings',             COUNT(*) FROM bookings              WHERE FIND_IN_SET(yajman_id, @yajman_ids) OR FIND_IN_SET(pandit_id, @pandit_ids)
UNION ALL SELECT 'seva_exchange',        COUNT(*) FROM seva_exchange         WHERE FIND_IN_SET(yajman_id, @yajman_ids) OR FIND_IN_SET(pandit_id, @pandit_ids);


-- ============================================================================
-- NOTES
--  * audit_log / audit are deliberately NOT deleted — they are the action
--    trail, not user data. Add your own DELETEs if your policy requires it.
--  * This schema has no foreign keys, so BLOCK 4's ordering is the only thing
--    holding referential integrity together.
--  * FIND_IN_SET() cannot use an index. That is fine for a maintenance script
--    with a handful of ids; do NOT try it on a large id list.
--  * Deleting a user is permanent once BLOCK 3's backups are dropped.
-- ============================================================================
