-- =============================================================================
-- SEED: 5 Merchants, 2-3 Stores each, Users with all role types
-- Idempotent: safe to re-run
-- Password hash = bcrypt("Admin@123", 10) for all users
-- =============================================================================

BEGIN;

-- ===========================================================================
-- MERCHANTS (Organizations)
-- ===========================================================================

INSERT INTO platform.organizations
    (id, name, slug, email, phone, plan, "isActive", "createdBy", "updatedBy")
VALUES
    ('org_freshmart',  'FreshMart India',     'freshmart',      'arjun@freshmart.in',   '+91 98765 43210', 'growth',     TRUE, 'system', 'system'),
    ('org_techzone',   'TechZone Electronics','techzone',       'nisha@techzone.in',    '+91 87654 32109', 'starter',    TRUE, 'system', 'system'),
    ('org_stylehub',   'StyleHub Fashion',    'stylehub',       'karan@stylehub.in',    '+91 76543 21098', 'enterprise', FALSE,'system', 'system'),
    ('org_grocerbox',  'GrocerBox',           'grocerbox',      'divya@grocerbox.in',   '+91 65432 10987', 'growth',     TRUE, 'system', 'system'),
    ('org_clickdeals', 'ClickDeals Online',   'clickdeals',     'priya@clickdeals.in',  '+91 54321 09876', 'starter',    TRUE, 'system', 'system')
ON CONFLICT (id) DO UPDATE SET
    name        = EXCLUDED.name,
    email       = EXCLUDED.email,
    plan        = EXCLUDED.plan,
    "updatedOn" = NOW();

-- Mark StyleHub as suspended
UPDATE platform.organizations SET
    "isActive"        = FALSE,
    "suspendedAt"     = NOW() - INTERVAL '3 days',
    "suspendedBy"     = 'user_admin_demo',
    "suspensionReason"= 'Payment dispute — pending resolution',
    "updatedOn"       = NOW()
WHERE id = 'org_stylehub';

-- ===========================================================================
-- STORES (2-3 per merchant)
-- ===========================================================================

INSERT INTO store.stores
    (id, "organizationId", name, slug, status, city, state, country,
     "defaultCurrency", "defaultLocale", timezone, "isActive", "createdBy", "updatedBy")
VALUES
    -- FreshMart (3 stores)
    ('store_fm_hyd',  'org_freshmart',  'FreshMart Hyderabad', 'freshmart-hyderabad', 'active',   'Hyderabad', 'Telangana',    'IN', 'INR','en-IN','Asia/Kolkata', TRUE,  'system','system'),
    ('store_fm_blr',  'org_freshmart',  'FreshMart Bangalore', 'freshmart-bangalore', 'active',   'Bangalore', 'Karnataka',    'IN', 'INR','en-IN','Asia/Kolkata', TRUE,  'system','system'),
    ('store_fm_che',  'org_freshmart',  'FreshMart Chennai',   'freshmart-chennai',   'active',   'Chennai',   'Tamil Nadu',   'IN', 'INR','en-IN','Asia/Kolkata', TRUE,  'system','system'),
    -- TechZone (2 stores)
    ('store_tz_mum',  'org_techzone',   'TechZone Mumbai',     'techzone-mumbai',     'active',   'Mumbai',    'Maharashtra',  'IN', 'INR','en-IN','Asia/Kolkata', TRUE,  'system','system'),
    ('store_tz_pun',  'org_techzone',   'TechZone Pune',       'techzone-pune',       'active',   'Pune',      'Maharashtra',  'IN', 'INR','en-IN','Asia/Kolkata', TRUE,  'system','system'),
    -- StyleHub (3 stores, all suspended)
    ('store_sh_del',  'org_stylehub',   'StyleHub Delhi',      'stylehub-delhi',      'inactive', 'Delhi',     'Delhi',        'IN', 'INR','en-IN','Asia/Kolkata', FALSE, 'system','system'),
    ('store_sh_che',  'org_stylehub',   'StyleHub Chennai',    'stylehub-chennai',    'inactive', 'Chennai',   'Tamil Nadu',   'IN', 'INR','en-IN','Asia/Kolkata', FALSE, 'system','system'),
    ('store_sh_kol',  'org_stylehub',   'StyleHub Kolkata',    'stylehub-kolkata',    'inactive', 'Kolkata',   'West Bengal',  'IN', 'INR','en-IN','Asia/Kolkata', FALSE, 'system','system'),
    -- GrocerBox (2 stores, one inactive)
    ('store_gb_pun',  'org_grocerbox',  'GrocerBox Pune',      'grocerbox-pune',      'active',   'Pune',      'Maharashtra',  'IN', 'INR','en-IN','Asia/Kolkata', TRUE,  'system','system'),
    ('store_gb_nas',  'org_grocerbox',  'GrocerBox Nashik',    'grocerbox-nashik',    'inactive', 'Nashik',    'Maharashtra',  'IN', 'INR','en-IN','Asia/Kolkata', FALSE, 'system','system'),
    -- ClickDeals (2 stores)
    ('store_cd_del',  'org_clickdeals', 'ClickDeals Delhi',    'clickdeals-delhi',    'active',   'Delhi',     'Delhi',        'IN', 'INR','en-IN','Asia/Kolkata', TRUE,  'system','system'),
    ('store_cd_jpr',  'org_clickdeals', 'ClickDeals Jaipur',   'clickdeals-jaipur',   'active',   'Jaipur',    'Rajasthan',    'IN', 'INR','en-IN','Asia/Kolkata', TRUE,  'system','system')
ON CONFLICT (id) DO UPDATE SET
    name        = EXCLUDED.name,
    city        = EXCLUDED.city,
    state       = EXCLUDED.state,
    "isActive"  = EXCLUDED."isActive",
    "updatedOn" = NOW();

-- ===========================================================================
-- USERS — one per role per relevant org
-- All passwords = Admin@123 (bcrypt hash)
-- ===========================================================================

-- Platform Admin (your team)
INSERT INTO admin.users
    (id, "storeId", "organizationId", email, "passwordHash", name, role, "isActive", "createdBy","updatedBy")
VALUES
    ('user_pa_1',  'store_demo', NULL,             'platform.admin@shopeee.com',  '$2b$10$qTpT5lQZUayGbXCuo1mteuWS.9RZLvRSqPFmCI6VvX0KtF9kT0Z0q', 'Vikram Nair',    'platform_admin',  TRUE,'system','system'),
    ('user_am_1',  'store_demo', NULL,             'ravi.kumar@shopeee.com',      '$2b$10$qTpT5lQZUayGbXCuo1mteuWS.9RZLvRSqPFmCI6VvX0KtF9kT0Z0q', 'Ravi Kumar',     'account_manager', TRUE,'system','system'),
    ('user_op_1',  'store_demo', NULL,             'sneha.singh@shopeee.com',     '$2b$10$qTpT5lQZUayGbXCuo1mteuWS.9RZLvRSqPFmCI6VvX0KtF9kT0Z0q', 'Sneha Singh',    'operator',        TRUE,'system','system'),
    -- FreshMart team
    ('user_me_fm', 'store_fm_hyd','org_freshmart', 'arjun@freshmart.in',          '$2b$10$qTpT5lQZUayGbXCuo1mteuWS.9RZLvRSqPFmCI6VvX0KtF9kT0Z0q', 'Arjun Mehta',    'merchant',        TRUE,'system','system'),
    ('user_sm_fm', 'store_fm_hyd','org_freshmart', 'manager.hyd@freshmart.in',    '$2b$10$qTpT5lQZUayGbXCuo1mteuWS.9RZLvRSqPFmCI6VvX0KtF9kT0Z0q', 'Priya Sharma',   'store_manager',   TRUE,'system','system'),
    ('user_ac_fm', 'store_fm_hyd','org_freshmart', 'accounts@freshmart.in',       '$2b$10$qTpT5lQZUayGbXCuo1mteuWS.9RZLvRSqPFmCI6VvX0KtF9kT0Z0q', 'Rahul Gupta',    'accountant',      TRUE,'system','system'),
    -- TechZone team
    ('user_me_tz', 'store_tz_mum','org_techzone',  'nisha@techzone.in',           '$2b$10$qTpT5lQZUayGbXCuo1mteuWS.9RZLvRSqPFmCI6VvX0KtF9kT0Z0q', 'Nisha Patel',    'merchant',        TRUE,'system','system'),
    ('user_sm_tz', 'store_tz_mum','org_techzone',  'manager@techzone.in',         '$2b$10$qTpT5lQZUayGbXCuo1mteuWS.9RZLvRSqPFmCI6VvX0KtF9kT0Z0q', 'Amit Joshi',     'store_manager',   TRUE,'system','system'),
    -- StyleHub team (suspended merchant)
    ('user_me_sh', 'store_sh_del','org_stylehub',  'karan@stylehub.in',           '$2b$10$qTpT5lQZUayGbXCuo1mteuWS.9RZLvRSqPFmCI6VvX0KtF9kT0Z0q', 'Karan Verma',    'merchant',        FALSE,'system','system'),
    ('user_sm_sh', 'store_sh_del','org_stylehub',  'manager@stylehub.in',         '$2b$10$qTpT5lQZUayGbXCuo1mteuWS.9RZLvRSqPFmCI6VvX0KtF9kT0Z0q', 'Deepa Rao',      'store_manager',   FALSE,'system','system'),
    ('user_ac_sh', 'store_sh_del','org_stylehub',  'accounts@stylehub.in',        '$2b$10$qTpT5lQZUayGbXCuo1mteuWS.9RZLvRSqPFmCI6VvX0KtF9kT0Z0q', 'Manoj Singh',    'accountant',      FALSE,'system','system'),
    -- GrocerBox team
    ('user_me_gb', 'store_gb_pun','org_grocerbox', 'divya@grocerbox.in',          '$2b$10$qTpT5lQZUayGbXCuo1mteuWS.9RZLvRSqPFmCI6VvX0KtF9kT0Z0q', 'Divya Rao',      'merchant',        TRUE,'system','system'),
    ('user_sm_gb', 'store_gb_pun','org_grocerbox', 'manager@grocerbox.in',        '$2b$10$qTpT5lQZUayGbXCuo1mteuWS.9RZLvRSqPFmCI6VvX0KtF9kT0Z0q', 'Suresh Kumar',   'store_manager',   TRUE,'system','system'),
    -- ClickDeals team
    ('user_me_cd', 'store_cd_del','org_clickdeals','priya@clickdeals.in',         '$2b$10$qTpT5lQZUayGbXCuo1mteuWS.9RZLvRSqPFmCI6VvX0KtF9kT0Z0q', 'Priya Reddy',    'merchant',        TRUE,'system','system'),
    ('user_ac_cd', 'store_cd_del','org_clickdeals','accounts@clickdeals.in',      '$2b$10$qTpT5lQZUayGbXCuo1mteuWS.9RZLvRSqPFmCI6VvX0KtF9kT0Z0q', 'Naveen Rao',     'accountant',      TRUE,'system','system')
ON CONFLICT (email) DO UPDATE SET
    name        = EXCLUDED.name,
    role        = EXCLUDED.role,
    "organizationId" = EXCLUDED."organizationId",
    "updatedOn" = NOW();

-- ===========================================================================
-- STORE STAFF — link users to their stores
-- ===========================================================================

INSERT INTO store.store_staff
    (id, "storeId", "userId", "organizationId", role, "isActive", "joinedAt", "createdBy","updatedBy")
VALUES
    -- FreshMart staff
    ('ss_fm_hyd_me', 'store_fm_hyd', 'user_me_fm', 'org_freshmart', 'merchant',      TRUE, NOW(),'system','system'),
    ('ss_fm_hyd_sm', 'store_fm_hyd', 'user_sm_fm', 'org_freshmart', 'store_manager', TRUE, NOW(),'system','system'),
    ('ss_fm_hyd_ac', 'store_fm_hyd', 'user_ac_fm', 'org_freshmart', 'accountant',    TRUE, NOW(),'system','system'),
    ('ss_fm_blr_me', 'store_fm_blr', 'user_me_fm', 'org_freshmart', 'merchant',      TRUE, NOW(),'system','system'),
    ('ss_fm_blr_sm', 'store_fm_blr', 'user_sm_fm', 'org_freshmart', 'store_manager', TRUE, NOW(),'system','system'),
    ('ss_fm_che_me', 'store_fm_che', 'user_me_fm', 'org_freshmart', 'merchant',      TRUE, NOW(),'system','system'),
    -- TechZone staff
    ('ss_tz_mum_me', 'store_tz_mum', 'user_me_tz', 'org_techzone',  'merchant',      TRUE, NOW(),'system','system'),
    ('ss_tz_mum_sm', 'store_tz_mum', 'user_sm_tz', 'org_techzone',  'store_manager', TRUE, NOW(),'system','system'),
    ('ss_tz_pun_me', 'store_tz_pun', 'user_me_tz', 'org_techzone',  'merchant',      TRUE, NOW(),'system','system'),
    -- StyleHub staff (suspended)
    ('ss_sh_del_me', 'store_sh_del', 'user_me_sh', 'org_stylehub',  'merchant',      FALSE,NOW(),'system','system'),
    ('ss_sh_del_sm', 'store_sh_del', 'user_sm_sh', 'org_stylehub',  'store_manager', FALSE,NOW(),'system','system'),
    ('ss_sh_del_ac', 'store_sh_del', 'user_ac_sh', 'org_stylehub',  'accountant',    FALSE,NOW(),'system','system'),
    ('ss_sh_che_me', 'store_sh_che', 'user_me_sh', 'org_stylehub',  'merchant',      FALSE,NOW(),'system','system'),
    ('ss_sh_kol_me', 'store_sh_kol', 'user_me_sh', 'org_stylehub',  'merchant',      FALSE,NOW(),'system','system'),
    -- GrocerBox staff
    ('ss_gb_pun_me', 'store_gb_pun', 'user_me_gb', 'org_grocerbox', 'merchant',      TRUE, NOW(),'system','system'),
    ('ss_gb_pun_sm', 'store_gb_pun', 'user_sm_gb', 'org_grocerbox', 'store_manager', TRUE, NOW(),'system','system'),
    -- ClickDeals staff
    ('ss_cd_del_me', 'store_cd_del', 'user_me_cd', 'org_clickdeals','merchant',      TRUE, NOW(),'system','system'),
    ('ss_cd_del_ac', 'store_cd_del', 'user_ac_cd', 'org_clickdeals','accountant',    TRUE, NOW(),'system','system'),
    ('ss_cd_jpr_me', 'store_cd_jpr', 'user_me_cd', 'org_clickdeals','merchant',      TRUE, NOW(),'system','system')
ON CONFLICT ("storeId","userId") DO UPDATE SET
    role        = EXCLUDED.role,
    "isActive"  = EXCLUDED."isActive",
    "updatedOn" = NOW();

COMMIT;

-- Verify
SELECT o.name AS merchant, o.plan, o."isActive",
       COUNT(DISTINCT s.id) AS stores,
       COUNT(DISTINCT ss.id) AS staff
  FROM platform.organizations o
  LEFT JOIN store.stores s     ON s."organizationId" = o.id
  LEFT JOIN store.store_staff ss ON ss."organizationId" = o.id
 WHERE o.id != 'org_demo'
 GROUP BY o.id, o.name, o.plan, o."isActive"
 ORDER BY o.name;
