-- Nxtgauge Seed Script
-- Run: psql $DATABASE_URL -f scripts/seed.sql
-- Safe to re-run (uses INSERT ... ON CONFLICT DO UPDATE for configs)

-- ── 1. Roles ─────────────────────────────────────────────────────────────────

INSERT INTO roles (key, name, audience) VALUES
  ('SUPER_ADMIN',           'Super Admin',            'INTERNAL'),
  ('ADMIN',                 'Admin',                  'INTERNAL'),
  ('SUPPORT',               'Support Agent',          'INTERNAL'),
  ('COMPANY',               'Company',                'EXTERNAL'),
  ('JOB_SEEKER',            'Job Seeker',             'EXTERNAL'),
  ('CUSTOMER',              'Customer',               'EXTERNAL'),
  ('PHOTOGRAPHER',          'Photographer',           'EXTERNAL'),
  ('MAKEUP_ARTIST',         'Makeup Artist',          'EXTERNAL'),
  ('TUTOR',                 'Tutor',                  'EXTERNAL'),
  ('DEVELOPER',             'Developer',              'EXTERNAL'),
  ('VIDEO_EDITOR',          'Video Editor',           'EXTERNAL'),
  ('GRAPHIC_DESIGNER',      'Graphic Designer',       'EXTERNAL'),
  ('SOCIAL_MEDIA_MANAGER',  'Social Media Manager',   'EXTERNAL'),
  ('FITNESS_TRAINER',       'Fitness Trainer',        'EXTERNAL'),
  ('CATERING_SERVICES',     'Catering Services',      'EXTERNAL')
ON CONFLICT (key) DO NOTHING;

-- ── 2. Super Admin User ──────────────────────────────────────────────────────
-- Default password: [REDACTED] (bcrypt hash)
-- CHANGE THIS PASSWORD IMMEDIATELY AFTER FIRST LOGIN

DO $$
DECLARE
  super_admin_role_id UUID;
  admin_user_id UUID;
BEGIN
  SELECT id INTO super_admin_role_id FROM roles WHERE key = 'SUPER_ADMIN';

  INSERT INTO users (email, password_hash, status, role_id, full_name, email_verified)
  VALUES (
    'admin@nxtgauge.com',
    '$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TiGniB9GSmJBGp0K7RqUi/4hY/Ii',
    'ACTIVE',
    super_admin_role_id,
    'Super Admin',
    true
  )
  ON CONFLICT (email) DO NOTHING
  RETURNING id INTO admin_user_id;

  IF admin_user_id IS NOT NULL THEN
    INSERT INTO user_roles (user_id, role_id, status, approved_at)
    VALUES (admin_user_id, super_admin_role_id, 'APPROVED', NOW())
    ON CONFLICT (user_id, role_id) DO NOTHING;
  END IF;
END $$;

-- ── 3. Onboarding Configs ─────────────────────────────────────────────────────
-- Each role gets its own INSERT for clarity and maintainability.
-- Fields use "id" (not "key") to match the frontend field binding.
-- All document uploads accept PDF + images.
-- City fields are readOnly and default to "Chennai, India".
-- version = 2 to force updates on re-run.

-- CUSTOMER (14 steps: 1 service select + 9 profession-specific + 4 shared)
-- The frontend normalizeSchemaPayload() auto-adds visibleWhen to steps
-- matching /^customer_(requirements|budget)_([a-z_]+)$/.
INSERT INTO onboarding_configs (role_id, schema_json, version, is_active)
SELECT id, $json${
  "steps": [
    {
      "id": "step_1_service",
      "title": "Select Service Category",
      "fields": [
        {
          "id": "profession",
          "label": "Service Category",
          "type": "select",
          "required": true,
          "options": [
            {"label": "Photographer",          "value": "photographer"},
            {"label": "Makeup Artist",         "value": "makeup_artist"},
            {"label": "Tutor",                 "value": "tutor"},
            {"label": "Developer",             "value": "developer"},
            {"label": "Video Editor",          "value": "video_editor"},
            {"label": "Graphic Designer",      "value": "graphic_designer"},
            {"label": "Social Media Manager",  "value": "social_media_manager"},
            {"label": "Fitness Trainer",       "value": "fitness_trainer"},
            {"label": "Catering Services",     "value": "catering_services"}
          ]
        }
      ]
    },
    {
      "id": "customer_requirements_photographer",
      "title": "Photography Requirements",
      "fields": [
        {"id": "event_type",      "label": "Event Type",      "type": "select", "required": true,
          "options": [{"label":"Wedding","value":"Wedding"},{"label":"Corporate Event","value":"Corporate Event"},{"label":"Birthday","value":"Birthday"},{"label":"Product Shoot","value":"Product Shoot"},{"label":"Portrait","value":"Portrait"}]},
        {"id": "coverage_hours",  "label": "Coverage Hours",  "type": "number", "required": true, "placeholder": "e.g., 4", "validation": {"min": 1}},
        {"id": "photo_style",     "label": "Photo Style",     "type": "select", "required": true,
          "options": [{"label":"Traditional","value":"Traditional"},{"label":"Candid","value":"Candid"},{"label":"Cinematic","value":"Cinematic"},{"label":"Documentary","value":"Documentary"}]}
      ]
    },
    {
      "id": "customer_requirements_makeup_artist",
      "title": "Makeup Requirements",
      "fields": [
        {"id": "occasion_type",    "label": "Occasion Type",    "type": "select", "required": true,
          "options": [{"label":"Bridal","value":"Bridal"},{"label":"Party/Guest","value":"Party/Guest"},{"label":"Photoshoot","value":"Photoshoot"},{"label":"Editorial","value":"Editorial"}]},
        {"id": "people_count",     "label": "Number of People", "type": "number", "required": true, "placeholder": "e.g., 2", "validation": {"min": 1}},
        {"id": "skin_preferences", "label": "Skin Preferences", "type": "textarea", "placeholder": "Any allergies or specific product requests?"}
      ]
    },
    {
      "id": "customer_requirements_tutor",
      "title": "Tutoring Requirements",
      "fields": [
        {"id": "subject",           "label": "Subject",           "type": "text",   "required": true, "placeholder": "e.g., Mathematics, Spoken English"},
        {"id": "grade_level",       "label": "Grade Level",       "type": "select", "required": true,
          "options": [{"label":"Primary","value":"Primary"},{"label":"Middle School","value":"Middle School"},{"label":"High School","value":"High School"},{"label":"College","value":"College"},{"label":"Professional","value":"Professional"}]},
        {"id": "sessions_per_week", "label": "Sessions Per Week", "type": "number", "required": true, "placeholder": "e.g., 3", "validation": {"min": 1}}
      ]
    },
    {
      "id": "customer_requirements_developer",
      "title": "Development Requirements",
      "fields": [
        {"id": "project_type",    "label": "Project Type",    "type": "select", "required": true,
          "options": [{"label":"Website","value":"Website"},{"label":"Mobile App","value":"Mobile App"},{"label":"E-commerce","value":"E-commerce"},{"label":"Custom Software","value":"Custom Software"}]},
        {"id": "platform",        "label": "Platform",        "type": "select", "required": true,
          "options": [{"label":"iOS","value":"iOS"},{"label":"Android","value":"Android"},{"label":"Web","value":"Web"},{"label":"Cross-platform","value":"Cross-platform"}]},
        {"id": "feature_summary", "label": "Feature Summary", "type": "textarea", "required": true, "placeholder": "Briefly describe what the app/website should do"}
      ]
    },
    {
      "id": "customer_requirements_video_editor",
      "title": "Video Editing Requirements",
      "fields": [
        {"id": "video_type",     "label": "Video Type",     "type": "select", "required": true,
          "options": [{"label":"YouTube Video","value":"YouTube Video"},{"label":"Instagram Reel/Shorts","value":"Instagram Reel/Shorts"},{"label":"Wedding Highlights","value":"Wedding Highlights"},{"label":"Corporate Promo","value":"Corporate Promo"}]},
        {"id": "video_duration", "label": "Video Duration", "type": "select", "required": true,
          "options": [{"label":"Under 1 min","value":"Under 1 min"},{"label":"1-5 mins","value":"1-5 mins"},{"label":"5-15 mins","value":"5-15 mins"},{"label":"Over 15 mins","value":"Over 15 mins"}]},
        {"id": "editing_style",  "label": "Editing Style",  "type": "text",   "required": true, "placeholder": "e.g., Fast-paced, Cinematic, Vlog style"}
      ]
    },
    {
      "id": "customer_requirements_graphic_designer",
      "title": "Design Requirements",
      "fields": [
        {"id": "design_type",       "label": "Design Type",       "type": "select", "required": true,
          "options": [{"label":"Logo/Branding","value":"Logo/Branding"},{"label":"Social Media Posts","value":"Social Media Posts"},{"label":"UI/UX","value":"UI/UX"},{"label":"Print Media","value":"Print Media"}]},
        {"id": "brand_guidelines",  "label": "Brand Guidelines",  "type": "select", "required": true,
          "options": [{"label":"Yes - I have them","value":"Yes - I have them"},{"label":"No - Need to create them","value":"No - Need to create them"}]},
        {"id": "asset_count",       "label": "Asset Count",       "type": "number", "required": true, "placeholder": "How many images/screens?", "validation": {"min": 1}}
      ]
    },
    {
      "id": "customer_requirements_social_media_manager",
      "title": "Social Media Requirements",
      "fields": [
        {"id": "platforms",         "label": "Platforms",         "type": "select", "required": true, "multiple": true,
          "options": [{"label":"Instagram","value":"Instagram"},{"label":"LinkedIn","value":"LinkedIn"},{"label":"Facebook","value":"Facebook"},{"label":"X/Twitter","value":"X/Twitter"},{"label":"YouTube","value":"YouTube"}]},
        {"id": "posting_frequency", "label": "Posting Frequency", "type": "select", "required": true,
          "options": [{"label":"1-2 times/week","value":"1-2 times/week"},{"label":"3-4 times/week","value":"3-4 times/week"},{"label":"Daily","value":"Daily"}]},
        {"id": "goal",              "label": "Goal",              "type": "select", "required": true,
          "options": [{"label":"Brand Awareness","value":"Brand Awareness"},{"label":"Lead Generation","value":"Lead Generation"},{"label":"Sales/Conversions","value":"Sales/Conversions"},{"label":"Community Building","value":"Community Building"}]}
      ]
    },
    {
      "id": "customer_requirements_fitness_trainer",
      "title": "Fitness Training Requirements",
      "fields": [
        {"id": "fitness_goal",       "label": "Fitness Goal",       "type": "select", "required": true,
          "options": [{"label":"Weight Loss","value":"Weight Loss"},{"label":"Muscle Gain","value":"Muscle Gain"},{"label":"Flexibility/Yoga","value":"Flexibility/Yoga"},{"label":"General Fitness","value":"General Fitness"}]},
        {"id": "sessions_per_week",  "label": "Sessions Per Week",  "type": "number", "required": true, "placeholder": "e.g., 5", "validation": {"min": 1}},
        {"id": "training_mode",      "label": "Training Mode",      "type": "select", "required": true,
          "options": [{"label":"Online/Virtual","value":"Online/Virtual"},{"label":"In-person","value":"In-person"}]}
      ]
    },
    {
      "id": "customer_requirements_catering_services",
      "title": "Catering Requirements",
      "fields": [
        {"id": "event_size",       "label": "Event Size (Guests)", "type": "number", "required": true, "placeholder": "Number of guests/plates", "validation": {"min": 1}},
        {"id": "menu_preference",  "label": "Menu Preference",     "type": "select", "required": true,
          "options": [{"label":"Pure Veg","value":"Pure Veg"},{"label":"Non-Veg","value":"Non-Veg"},{"label":"Mixed","value":"Mixed"}]},
        {"id": "cuisine_type",     "label": "Cuisine Type",        "type": "text",   "required": true, "placeholder": "e.g., South Indian, North Indian, Continental"}
      ]
    },
    {
      "id": "step_3_budget_timeline",
      "title": "Budget and Timeline",
      "fields": [
        {"id": "budget_range",    "label": "Budget Range",    "type": "select", "required": true,
          "options": [{"label":"Under \u20b95,000","value":"Under \u20b95,000"},{"label":"\u20b95,000 - \u20b915,000","value":"\u20b95,000 - \u20b915,000"},{"label":"\u20b915,000 - \u20b950,000","value":"\u20b915,000 - \u20b950,000"},{"label":"\u20b950,000 - \u20b91,00,000","value":"\u20b950,000 - \u20b91,00,000"},{"label":"\u20b91,00,000+","value":"\u20b91,00,000+"}]},
        {"id": "expected_start",  "label": "Expected Start",  "type": "date",   "required": true},
        {"id": "urgency",         "label": "Urgency",         "type": "select", "required": true,
          "options": [{"label":"Relaxed (No strict deadline)","value":"Relaxed (No strict deadline)"},{"label":"Standard (Within a few weeks)","value":"Standard (Within a few weeks)"},{"label":"ASAP (Urgent)","value":"ASAP (Urgent)"}]}
      ]
    },
    {
      "id": "step_4_location",
      "title": "Location and Preference",
      "fields": [
        {"id": "service_mode",  "label": "Service Mode",  "type": "select", "required": true,
          "options": [{"label":"Onsite (In-person)","value":"Onsite (In-person)"},{"label":"Remote (Online)","value":"Remote (Online)"},{"label":"Hybrid (Mix of both)","value":"Hybrid (Mix of both)"}]},
        {"id": "address_line",  "label": "Address Line",  "type": "text",   "required": true, "placeholder": "Street address, Landmark"},
        {"id": "service_city",  "label": "Service City",  "type": "text",   "required": true, "readOnly": true, "defaultValue": "Chennai, India"},
        {"id": "pin_code",      "label": "PIN Code",      "type": "text",   "required": true, "placeholder": "e.g., 600001", "validation": {"pattern": "^[0-9]{6}$", "minLength": 6, "maxLength": 6}}
      ]
    },
    {
      "id": "step_5_review",
      "title": "Final Review",
      "fields": [
        {"id": "summary_note", "label": "Additional Instructions", "type": "textarea", "placeholder": "Any additional instructions or context?"}
      ]
    },
    {
      "id": "step_6_verification",
      "title": "Identity Verification",
      "fields": [
        {"id": "id_type",            "label": "ID Type",   "type": "select", "required": true,
          "options": [{"label":"Aadhaar Card","value":"Aadhaar Card"},{"label":"PAN Card","value":"PAN Card"},{"label":"Driving License","value":"Driving License"},{"label":"Voter ID","value":"Voter ID"},{"label":"Passport","value":"Passport"}]},
        {"id": "id_number",          "label": "ID Number", "type": "text",   "required": true, "placeholder": "Enter ID Number"},
        {"id": "id_document_upload", "label": "Upload ID Document", "type": "file", "required": true, "multiple": true, "maxFiles": 2, "accept": "application/pdf,image/jpeg,image/jpg,image/png", "maxSizeMB": 2}
      ]
    }
  ]
}$json$::jsonb, 2, true
FROM roles WHERE key = 'CUSTOMER'
ON CONFLICT (role_id, is_active) DO UPDATE SET schema_json = EXCLUDED.schema_json, version = EXCLUDED.version;

-- COMPANY (6 steps)
INSERT INTO onboarding_configs (role_id, schema_json, version, is_active)
SELECT id, $json${
  "steps": [
    {
      "id": "step_1_identity",
      "title": "Company Identity",
      "fields": [
        {"id": "company_name", "label": "Company Name", "type": "text", "required": true, "placeholder": "Your registered company name"},
        {"id": "legal_name",   "label": "Legal Name",   "type": "text", "required": true, "placeholder": "As per registration documents"},
        {"id": "industry",     "label": "Industry",     "type": "select", "required": true,
          "options": [{"label":"IT/Software","value":"IT/Software"},{"label":"Marketing/Advertising","value":"Marketing/Advertising"},{"label":"EdTech","value":"EdTech"},{"label":"Media/Entertainment","value":"Media/Entertainment"},{"label":"Health/Wellness","value":"Health/Wellness"},{"label":"Food/Beverage","value":"Food/Beverage"},{"label":"Other","value":"Other"}]}
      ]
    },
    {
      "id": "step_2_contact",
      "title": "Contact Details",
      "fields": [
        {"id": "contact_name",  "label": "Contact Person Name",  "type": "text",  "required": true, "placeholder": "HR Manager or Founder"},
        {"id": "contact_email", "label": "Contact Email",        "type": "email", "required": true, "placeholder": "hr@yourcompany.com"},
        {"id": "contact_phone", "label": "Contact Phone",        "type": "tel",   "required": true, "placeholder": "10-digit mobile number", "validation": {"pattern": "^[0-9]{10}$", "minLength": 10, "maxLength": 10}}
      ]
    },
    {
      "id": "step_3_presence",
      "title": "Company Presence",
      "fields": [
        {"id": "website",   "label": "Website URL",  "type": "url",    "required": false, "placeholder": "https://yourcompany.com"},
        {"id": "hq_city",   "label": "HQ City",      "type": "text",   "required": true,  "readOnly": true, "defaultValue": "Chennai, India"},
        {"id": "team_size", "label": "Team Size",    "type": "select", "required": true,
          "options": [{"label":"1-10","value":"1-10"},{"label":"11-50","value":"11-50"},{"label":"51-200","value":"51-200"},{"label":"200+","value":"200+"}]}
      ]
    },
    {
      "id": "step_4_hiring",
      "title": "Hiring Preferences",
      "fields": [
        {"id": "hiring_for",       "label": "Currently Hiring For", "type": "text",   "required": true, "placeholder": "e.g., Frontend Developer, Sales Executive"},
        {"id": "work_mode",        "label": "Work Mode",            "type": "select", "required": true,
          "options": [{"label":"Onsite (Work from office)","value":"Onsite"},{"label":"Remote (Work from home)","value":"Remote"},{"label":"Hybrid","value":"Hybrid"}]},
        {"id": "monthly_openings", "label": "Monthly Openings",     "type": "number", "required": true, "placeholder": "Expected number of hires/month", "validation": {"min": 1}}
      ]
    },
    {
      "id": "step_5_compliance",
      "title": "Verification and Compliance",
      "fields": [
        {"id": "registration_number", "label": "Company Registration Number", "type": "text",  "required": true, "placeholder": "CIN / MSME / GST Number"},
        {"id": "official_email",      "label": "Official Email",               "type": "email", "required": true, "placeholder": "official@yourcompany.com"}
      ]
    },
    {
      "id": "step_6_business_verification",
      "title": "Business Verification",
      "fields": [
        {"id": "company_doc_type",   "label": "Document Type",   "type": "select", "required": true,
          "options": [{"label":"GST Certificate","value":"GST Certificate"},{"label":"Certificate of Incorporation","value":"Certificate of Incorporation"},{"label":"MSME/Udyam Registration","value":"MSME/Udyam Registration"},{"label":"Company PAN Card","value":"Company PAN Card"}]},
        {"id": "company_doc_upload", "label": "Upload Company Document", "type": "file", "required": true, "multiple": false, "maxFiles": 1, "accept": "application/pdf,image/jpeg,image/jpg,image/png", "maxSizeMB": 2}
      ]
    }
  ]
}$json$::jsonb, 2, true
FROM roles WHERE key = 'COMPANY'
ON CONFLICT (role_id, is_active) DO UPDATE SET schema_json = EXCLUDED.schema_json, version = EXCLUDED.version;

-- JOB_SEEKER (5 steps — NO resume upload to prevent phone number exposure)
INSERT INTO onboarding_configs (role_id, schema_json, version, is_active)
SELECT id, $json${
  "steps": [
    {
      "id": "step_1_basic",
      "title": "Basic Profile",
      "fields": [
        {"id": "full_name", "label": "Full Name",  "type": "text", "required": true, "placeholder": "Your full name"},
        {"id": "city",      "label": "City",       "type": "text", "required": true, "readOnly": true, "defaultValue": "Chennai, India"},
        {"id": "skills",    "label": "Key Skills", "type": "text", "required": true, "placeholder": "e.g., JavaScript, React, Node.js (comma-separated)"}
      ]
    },
    {
      "id": "step_2_preferences",
      "title": "Job Preferences",
      "fields": [
        {"id": "preferred_role",    "label": "Preferred Role",       "type": "text",   "required": true, "placeholder": "e.g., Frontend Developer"},
        {"id": "expected_salary",   "label": "Expected Salary (LPA)", "type": "number", "required": true, "placeholder": "Annual salary in Lakhs", "validation": {"min": 0}},
        {"id": "work_mode",         "label": "Work Mode",            "type": "select", "required": true,
          "options": [{"label":"Onsite","value":"Onsite"},{"label":"Remote","value":"Remote"},{"label":"Hybrid","value":"Hybrid"}]}
      ]
    },
    {
      "id": "step_3_experience",
      "title": "Experience Details",
      "fields": [
        {"id": "experience_years", "label": "Years of Experience", "type": "number", "required": true, "placeholder": "0 for freshers", "validation": {"min": 0}},
        {"id": "latest_company",   "label": "Latest/Current Company", "type": "text", "required": false, "placeholder": "Company name or 'Fresher'"},
        {"id": "notice_period",    "label": "Notice Period",       "type": "select", "required": true,
          "options": [{"label":"Immediate","value":"Immediate"},{"label":"15 Days","value":"15 Days"},{"label":"30 Days","value":"30 Days"},{"label":"60 Days","value":"60 Days"},{"label":"90 Days","value":"90 Days"}]}
      ]
    },
    {
      "id": "step_4_review",
      "title": "About Me",
      "fields": [
        {"id": "about_me",    "label": "About Me",     "type": "textarea", "required": true,  "placeholder": "Tell companies about yourself, your strengths, and career goals"},
        {"id": "linkedin_url","label": "LinkedIn URL", "type": "url",      "required": false, "placeholder": "https://linkedin.com/in/yourprofile"}
      ]
    },
    {
      "id": "step_5_verification",
      "title": "Identity Verification",
      "fields": [
        {"id": "id_type",            "label": "ID Type",   "type": "select", "required": true,
          "options": [{"label":"Aadhaar Card","value":"Aadhaar Card"},{"label":"PAN Card","value":"PAN Card"},{"label":"Driving License","value":"Driving License"},{"label":"Voter ID","value":"Voter ID"},{"label":"Passport","value":"Passport"}]},
        {"id": "id_number",          "label": "ID Number", "type": "text",   "required": true, "placeholder": "Enter ID Number"},
        {"id": "id_document_upload", "label": "Upload ID Document", "type": "file", "required": true, "multiple": true, "maxFiles": 2, "accept": "application/pdf,image/jpeg,image/jpg,image/png", "maxSizeMB": 2}
      ]
    }
  ]
}$json$::jsonb, 2, true
FROM roles WHERE key = 'JOB_SEEKER'
ON CONFLICT (role_id, is_active) DO UPDATE SET schema_json = EXCLUDED.schema_json, version = EXCLUDED.version;

-- PHOTOGRAPHER (6 steps)
INSERT INTO onboarding_configs (role_id, schema_json, version, is_active)
SELECT id, $json${
  "steps": [
    {
      "id": "step_1_profile",
      "title": "Profile Details",
      "fields": [
        {"id": "full_name",   "label": "Full Name",         "type": "text",     "required": true, "placeholder": "Your full name"},
        {"id": "experience",  "label": "Experience (Years)","type": "number",   "required": true, "validation": {"min": 0}},
        {"id": "bio",         "label": "Bio",               "type": "textarea", "required": true, "placeholder": "Hi, I am a photographer specializing in..."}
      ]
    },
    {
      "id": "step_2_contact",
      "title": "Contact and Location",
      "fields": [
        {"id": "email", "label": "Email",        "type": "email", "required": true},
        {"id": "phone", "label": "Phone Number", "type": "tel",   "required": true, "placeholder": "10-digit mobile number", "validation": {"pattern": "^[0-9]{10}$", "minLength": 10, "maxLength": 10}},
        {"id": "city",  "label": "City",         "type": "text",  "required": true, "readOnly": true, "defaultValue": "Chennai, India"}
      ]
    },
    {
      "id": "step_3_specialization",
      "title": "Photography Specialization",
      "fields": [
        {"id": "specialty",        "label": "Specialty",        "type": "select", "required": true,
          "options": [{"label":"Wedding","value":"Wedding"},{"label":"Portrait","value":"Portrait"},{"label":"Product/Commercial","value":"Product/Commercial"},{"label":"Events","value":"Events"},{"label":"Real Estate","value":"Real Estate"},{"label":"Fashion/Editorial","value":"Fashion/Editorial"}]},
        {"id": "camera_equipment", "label": "Camera Equipment", "type": "text",   "required": true, "placeholder": "e.g., Canon EOS R5, Sony A7 III"},
        {"id": "editing_software", "label": "Editing Software", "type": "select", "required": true,
          "options": [{"label":"Adobe Lightroom","value":"Adobe Lightroom"},{"label":"Adobe Photoshop","value":"Adobe Photoshop"},{"label":"Capture One","value":"Capture One"},{"label":"Other","value":"Other"}]}
      ]
    },
    {
      "id": "step_4_pricing",
      "title": "Pricing and Availability",
      "fields": [
        {"id": "pricing_model", "label": "Pricing Model",  "type": "select", "required": true,
          "options": [{"label":"Hourly","value":"Hourly"},{"label":"Per Session/Event","value":"Per Session/Event"},{"label":"Per Project","value":"Per Project"},{"label":"Custom Package","value":"Custom Package"}]},
        {"id": "base_rate",     "label": "Base Rate (\u20b9)","type": "number", "required": true, "placeholder": "Starting price in INR", "validation": {"min": 0}},
        {"id": "availability",  "label": "Availability",   "type": "select", "required": true,
          "options": [{"label":"Weekdays","value":"Weekdays"},{"label":"Weekends","value":"Weekends"},{"label":"All Days","value":"All Days"},{"label":"By Appointment","value":"By Appointment"}]}
      ]
    },
    {
      "id": "step_5_portfolio",
      "title": "Portfolio",
      "fields": [
        {"id": "portfolio_images", "label": "Portfolio Images (up to 6)", "type": "file", "required": true, "multiple": true, "maxFiles": 6, "accept": "image/jpeg,image/jpg,image/png,image/webp", "maxSizeMB": 2, "helperText": "Upload up to 6 images, max 2MB each. Displayed in 3\u00d72 grid."},
        {"id": "portfolio_url",    "label": "External Portfolio URL",    "type": "url",  "required": false, "placeholder": "Instagram, website, or Behance link"},
        {"id": "portfolio_note",   "label": "Portfolio Note",            "type": "textarea", "placeholder": "Describe your style and best work"}
      ]
    },
    {
      "id": "step_6_verification",
      "title": "Identity Verification",
      "fields": [
        {"id": "id_type",            "label": "ID Type",   "type": "select", "required": true,
          "options": [{"label":"Aadhaar Card","value":"Aadhaar Card"},{"label":"PAN Card","value":"PAN Card"},{"label":"Driving License","value":"Driving License"},{"label":"Voter ID","value":"Voter ID"},{"label":"Passport","value":"Passport"}]},
        {"id": "id_number",          "label": "ID Number", "type": "text",   "required": true, "placeholder": "Enter ID Number"},
        {"id": "id_document_upload", "label": "Upload ID Document", "type": "file", "required": true, "multiple": true, "maxFiles": 2, "accept": "application/pdf,image/jpeg,image/jpg,image/png", "maxSizeMB": 2}
      ]
    }
  ]
}$json$::jsonb, 2, true
FROM roles WHERE key = 'PHOTOGRAPHER'
ON CONFLICT (role_id, is_active) DO UPDATE SET schema_json = EXCLUDED.schema_json, version = EXCLUDED.version;

-- MAKEUP_ARTIST (6 steps)
INSERT INTO onboarding_configs (role_id, schema_json, version, is_active)
SELECT id, $json${
  "steps": [
    {
      "id": "step_1_profile",
      "title": "Profile Details",
      "fields": [
        {"id": "full_name",  "label": "Full Name",          "type": "text",     "required": true, "placeholder": "Your full name"},
        {"id": "experience", "label": "Experience (Years)", "type": "number",   "required": true, "validation": {"min": 0}},
        {"id": "bio",        "label": "Bio",                "type": "textarea", "required": true, "placeholder": "Hi, I am a makeup artist specializing in..."}
      ]
    },
    {
      "id": "step_2_contact",
      "title": "Contact and Location",
      "fields": [
        {"id": "email", "label": "Email",        "type": "email", "required": true},
        {"id": "phone", "label": "Phone Number", "type": "tel",   "required": true, "placeholder": "10-digit mobile number", "validation": {"pattern": "^[0-9]{10}$", "minLength": 10, "maxLength": 10}},
        {"id": "city",  "label": "City",         "type": "text",  "required": true, "readOnly": true, "defaultValue": "Chennai, India"}
      ]
    },
    {
      "id": "step_3_specialization",
      "title": "Makeup Specialization",
      "fields": [
        {"id": "makeup_specialty",  "label": "Makeup Specialty",   "type": "select", "required": true,
          "options": [{"label":"Bridal","value":"Bridal"},{"label":"Editorial/Fashion","value":"Editorial/Fashion"},{"label":"Film/TV","value":"Film/TV"},{"label":"Special Effects","value":"Special Effects"},{"label":"Party/Events","value":"Party/Events"}]},
        {"id": "preferred_brands",  "label": "Preferred Brands",   "type": "text",   "required": true, "placeholder": "e.g., MAC, Huda Beauty, Kryolan"},
        {"id": "services_offered",  "label": "Services Offered",   "type": "select", "required": true, "multiple": true,
          "options": [{"label":"Bridal Makeup","value":"Bridal Makeup"},{"label":"Party Makeup","value":"Party Makeup"},{"label":"Photoshoot Makeup","value":"Photoshoot Makeup"},{"label":"Grooming","value":"Grooming"},{"label":"Airbrush Makeup","value":"Airbrush Makeup"}]}
      ]
    },
    {
      "id": "step_4_pricing",
      "title": "Pricing and Availability",
      "fields": [
        {"id": "pricing_model", "label": "Pricing Model",   "type": "select", "required": true,
          "options": [{"label":"Per Session","value":"Per Session"},{"label":"Per Person","value":"Per Person"},{"label":"Package-based","value":"Package-based"},{"label":"Custom","value":"Custom"}]},
        {"id": "base_rate",     "label": "Base Rate (\u20b9)", "type": "number", "required": true, "placeholder": "Starting price in INR", "validation": {"min": 0}},
        {"id": "availability",  "label": "Availability",    "type": "select", "required": true,
          "options": [{"label":"Weekdays","value":"Weekdays"},{"label":"Weekends","value":"Weekends"},{"label":"All Days","value":"All Days"},{"label":"By Appointment","value":"By Appointment"}]}
      ]
    },
    {
      "id": "step_5_portfolio",
      "title": "Portfolio",
      "fields": [
        {"id": "portfolio_images", "label": "Portfolio Images (up to 6)", "type": "file", "required": true, "multiple": true, "maxFiles": 6, "accept": "image/jpeg,image/jpg,image/png,image/webp", "maxSizeMB": 2, "helperText": "Upload up to 6 images, max 2MB each. Displayed in 3\u00d72 grid."},
        {"id": "portfolio_url",    "label": "External Portfolio URL",    "type": "url",  "required": false, "placeholder": "Instagram or website link"},
        {"id": "portfolio_note",   "label": "Portfolio Note",            "type": "textarea", "placeholder": "Describe your style and best work"}
      ]
    },
    {
      "id": "step_6_verification",
      "title": "Identity Verification",
      "fields": [
        {"id": "id_type",            "label": "ID Type",   "type": "select", "required": true,
          "options": [{"label":"Aadhaar Card","value":"Aadhaar Card"},{"label":"PAN Card","value":"PAN Card"},{"label":"Driving License","value":"Driving License"},{"label":"Voter ID","value":"Voter ID"},{"label":"Passport","value":"Passport"}]},
        {"id": "id_number",          "label": "ID Number", "type": "text",   "required": true, "placeholder": "Enter ID Number"},
        {"id": "id_document_upload", "label": "Upload ID Document", "type": "file", "required": true, "multiple": true, "maxFiles": 2, "accept": "application/pdf,image/jpeg,image/jpg,image/png", "maxSizeMB": 2}
      ]
    }
  ]
}$json$::jsonb, 2, true
FROM roles WHERE key = 'MAKEUP_ARTIST'
ON CONFLICT (role_id, is_active) DO UPDATE SET schema_json = EXCLUDED.schema_json, version = EXCLUDED.version;

-- TUTOR (6 steps)
INSERT INTO onboarding_configs (role_id, schema_json, version, is_active)
SELECT id, $json${
  "steps": [
    {
      "id": "step_1_profile",
      "title": "Profile Details",
      "fields": [
        {"id": "full_name",  "label": "Full Name",          "type": "text",     "required": true, "placeholder": "Your full name"},
        {"id": "experience", "label": "Experience (Years)", "type": "number",   "required": true, "validation": {"min": 0}},
        {"id": "bio",        "label": "Bio",                "type": "textarea", "required": true, "placeholder": "Hi, I am a tutor specializing in..."}
      ]
    },
    {
      "id": "step_2_contact",
      "title": "Contact and Location",
      "fields": [
        {"id": "email", "label": "Email",        "type": "email", "required": true},
        {"id": "phone", "label": "Phone Number", "type": "tel",   "required": true, "placeholder": "10-digit mobile number", "validation": {"pattern": "^[0-9]{10}$", "minLength": 10, "maxLength": 10}},
        {"id": "city",  "label": "City",         "type": "text",  "required": true, "readOnly": true, "defaultValue": "Chennai, India"}
      ]
    },
    {
      "id": "step_3_specialization",
      "title": "Teaching Specialization",
      "fields": [
        {"id": "subjects",       "label": "Subjects",       "type": "text",   "required": true, "placeholder": "e.g., Mathematics, Physics, Spoken English"},
        {"id": "grade_levels",   "label": "Grade Levels",   "type": "select", "required": true, "multiple": true,
          "options": [{"label":"Primary (1-5)","value":"Primary"},{"label":"Middle School (6-8)","value":"Middle School"},{"label":"High School (9-12)","value":"High School"},{"label":"College","value":"College"},{"label":"Professional/Adult","value":"Professional"}]},
        {"id": "teaching_mode",  "label": "Teaching Mode",  "type": "select", "required": true,
          "options": [{"label":"Online","value":"Online"},{"label":"Offline (Home visits)","value":"Offline"},{"label":"Hybrid","value":"Hybrid"}]}
      ]
    },
    {
      "id": "step_4_pricing",
      "title": "Pricing and Availability",
      "fields": [
        {"id": "pricing_model",   "label": "Pricing Model",       "type": "select", "required": true,
          "options": [{"label":"Per Hour","value":"Per Hour"},{"label":"Per Session","value":"Per Session"},{"label":"Monthly Package","value":"Monthly Package"}]},
        {"id": "base_rate",       "label": "Base Rate (\u20b9)",   "type": "number", "required": true, "placeholder": "Starting price in INR", "validation": {"min": 0}},
        {"id": "availability",    "label": "Availability",        "type": "select", "required": true,
          "options": [{"label":"Weekdays","value":"Weekdays"},{"label":"Weekends","value":"Weekends"},{"label":"All Days","value":"All Days"},{"label":"By Appointment","value":"By Appointment"}]}
      ]
    },
    {
      "id": "step_5_portfolio",
      "title": "Credentials and Work Samples",
      "fields": [
        {"id": "portfolio_images", "label": "Certificates / Work Samples (up to 6)", "type": "file", "required": false, "multiple": true, "maxFiles": 6, "accept": "image/jpeg,image/jpg,image/png,image/webp", "maxSizeMB": 2, "helperText": "Upload certificates or student work samples, max 2MB each."},
        {"id": "portfolio_url",    "label": "Online Profile or Course Link",         "type": "url",  "required": false, "placeholder": "LinkedIn, Vedantu, or website link"},
        {"id": "portfolio_note",   "label": "Teaching Approach",                     "type": "textarea", "placeholder": "Describe your teaching style and methodology"}
      ]
    },
    {
      "id": "step_6_verification",
      "title": "Identity Verification",
      "fields": [
        {"id": "id_type",            "label": "ID Type",   "type": "select", "required": true,
          "options": [{"label":"Aadhaar Card","value":"Aadhaar Card"},{"label":"PAN Card","value":"PAN Card"},{"label":"Driving License","value":"Driving License"},{"label":"Voter ID","value":"Voter ID"},{"label":"Passport","value":"Passport"}]},
        {"id": "id_number",          "label": "ID Number", "type": "text",   "required": true, "placeholder": "Enter ID Number"},
        {"id": "id_document_upload", "label": "Upload ID Document", "type": "file", "required": true, "multiple": true, "maxFiles": 2, "accept": "application/pdf,image/jpeg,image/jpg,image/png", "maxSizeMB": 2}
      ]
    }
  ]
}$json$::jsonb, 2, true
FROM roles WHERE key = 'TUTOR'
ON CONFLICT (role_id, is_active) DO UPDATE SET schema_json = EXCLUDED.schema_json, version = EXCLUDED.version;

-- DEVELOPER (6 steps)
INSERT INTO onboarding_configs (role_id, schema_json, version, is_active)
SELECT id, $json${
  "steps": [
    {
      "id": "step_1_profile",
      "title": "Profile Details",
      "fields": [
        {"id": "full_name",  "label": "Full Name",          "type": "text",     "required": true, "placeholder": "Your full name"},
        {"id": "experience", "label": "Experience (Years)", "type": "number",   "required": true, "validation": {"min": 0}},
        {"id": "bio",        "label": "Bio",                "type": "textarea", "required": true, "placeholder": "Hi, I am a developer specializing in..."}
      ]
    },
    {
      "id": "step_2_contact",
      "title": "Contact and Location",
      "fields": [
        {"id": "email", "label": "Email",        "type": "email", "required": true},
        {"id": "phone", "label": "Phone Number", "type": "tel",   "required": true, "placeholder": "10-digit mobile number", "validation": {"pattern": "^[0-9]{10}$", "minLength": 10, "maxLength": 10}},
        {"id": "city",  "label": "City",         "type": "text",  "required": true, "readOnly": true, "defaultValue": "Chennai, India"}
      ]
    },
    {
      "id": "step_3_specialization",
      "title": "Development Specialization",
      "fields": [
        {"id": "developer_type",      "label": "Developer Type",  "type": "select", "required": true,
          "options": [{"label":"Frontend","value":"Frontend"},{"label":"Backend","value":"Backend"},{"label":"Full-stack","value":"Full-stack"},{"label":"Mobile (iOS/Android)","value":"Mobile"},{"label":"DevOps/Cloud","value":"DevOps"}]},
        {"id": "tech_stack",          "label": "Tech Stack",      "type": "text",   "required": true, "placeholder": "e.g., React, Node.js, PostgreSQL, Docker"},
        {"id": "open_source_profile", "label": "GitHub / Portfolio URL", "type": "url", "required": false, "placeholder": "https://github.com/yourusername"}
      ]
    },
    {
      "id": "step_4_pricing",
      "title": "Pricing and Availability",
      "fields": [
        {"id": "pricing_model", "label": "Pricing Model",   "type": "select", "required": true,
          "options": [{"label":"Hourly","value":"Hourly"},{"label":"Per Project","value":"Per Project"},{"label":"Monthly Retainer","value":"Monthly Retainer"},{"label":"Custom","value":"Custom"}]},
        {"id": "base_rate",     "label": "Base Rate (\u20b9)", "type": "number", "required": true, "placeholder": "Starting price in INR", "validation": {"min": 0}},
        {"id": "availability",  "label": "Availability",    "type": "select", "required": true,
          "options": [{"label":"Full-time","value":"Full-time"},{"label":"Part-time","value":"Part-time"},{"label":"Weekends Only","value":"Weekends Only"},{"label":"Flexible","value":"Flexible"}]}
      ]
    },
    {
      "id": "step_5_portfolio",
      "title": "Portfolio",
      "fields": [
        {"id": "portfolio_images", "label": "Screenshots / Work Samples (up to 6)", "type": "file", "required": false, "multiple": true, "maxFiles": 6, "accept": "image/jpeg,image/jpg,image/png,image/webp", "maxSizeMB": 2, "helperText": "Upload app/website screenshots, max 2MB each."},
        {"id": "portfolio_url",    "label": "Live Project / Portfolio URL",         "type": "url",  "required": false, "placeholder": "Deployed project, Behance, or GitHub Pages"},
        {"id": "portfolio_note",   "label": "Portfolio Note",                       "type": "textarea", "placeholder": "Describe your most impactful projects"}
      ]
    },
    {
      "id": "step_6_verification",
      "title": "Identity Verification",
      "fields": [
        {"id": "id_type",            "label": "ID Type",   "type": "select", "required": true,
          "options": [{"label":"Aadhaar Card","value":"Aadhaar Card"},{"label":"PAN Card","value":"PAN Card"},{"label":"Driving License","value":"Driving License"},{"label":"Voter ID","value":"Voter ID"},{"label":"Passport","value":"Passport"}]},
        {"id": "id_number",          "label": "ID Number", "type": "text",   "required": true, "placeholder": "Enter ID Number"},
        {"id": "id_document_upload", "label": "Upload ID Document", "type": "file", "required": true, "multiple": true, "maxFiles": 2, "accept": "application/pdf,image/jpeg,image/jpg,image/png", "maxSizeMB": 2}
      ]
    }
  ]
}$json$::jsonb, 2, true
FROM roles WHERE key = 'DEVELOPER'
ON CONFLICT (role_id, is_active) DO UPDATE SET schema_json = EXCLUDED.schema_json, version = EXCLUDED.version;

-- VIDEO_EDITOR (6 steps)
INSERT INTO onboarding_configs (role_id, schema_json, version, is_active)
SELECT id, $json${
  "steps": [
    {
      "id": "step_1_profile",
      "title": "Profile Details",
      "fields": [
        {"id": "full_name",  "label": "Full Name",          "type": "text",     "required": true, "placeholder": "Your full name"},
        {"id": "experience", "label": "Experience (Years)", "type": "number",   "required": true, "validation": {"min": 0}},
        {"id": "bio",        "label": "Bio",                "type": "textarea", "required": true, "placeholder": "Hi, I am a video editor specializing in..."}
      ]
    },
    {
      "id": "step_2_contact",
      "title": "Contact and Location",
      "fields": [
        {"id": "email", "label": "Email",        "type": "email", "required": true},
        {"id": "phone", "label": "Phone Number", "type": "tel",   "required": true, "placeholder": "10-digit mobile number", "validation": {"pattern": "^[0-9]{10}$", "minLength": 10, "maxLength": 10}},
        {"id": "city",  "label": "City",         "type": "text",  "required": true, "readOnly": true, "defaultValue": "Chennai, India"}
      ]
    },
    {
      "id": "step_3_specialization",
      "title": "Video Editing Specialization",
      "fields": [
        {"id": "editing_software",  "label": "Primary Editing Software", "type": "select", "required": true,
          "options": [{"label":"Adobe Premiere Pro","value":"Adobe Premiere Pro"},{"label":"Final Cut Pro","value":"Final Cut Pro"},{"label":"DaVinci Resolve","value":"DaVinci Resolve"},{"label":"After Effects","value":"After Effects"},{"label":"CapCut","value":"CapCut"}]},
        {"id": "video_specialties", "label": "Video Specialties",        "type": "select", "required": true, "multiple": true,
          "options": [{"label":"YouTube Videos","value":"YouTube Videos"},{"label":"Instagram Reels/Shorts","value":"Reels/Shorts"},{"label":"Wedding Highlights","value":"Wedding Highlights"},{"label":"Corporate Promo","value":"Corporate Promo"},{"label":"Explainer/Animation","value":"Explainer"}]},
        {"id": "turnaround_time",   "label": "Typical Turnaround",       "type": "select", "required": true,
          "options": [{"label":"24-48 hours","value":"24-48 hours"},{"label":"3-5 days","value":"3-5 days"},{"label":"1-2 weeks","value":"1-2 weeks"},{"label":"Depends on project","value":"Depends"}]}
      ]
    },
    {
      "id": "step_4_pricing",
      "title": "Pricing and Availability",
      "fields": [
        {"id": "pricing_model", "label": "Pricing Model",   "type": "select", "required": true,
          "options": [{"label":"Per Video","value":"Per Video"},{"label":"Per Minute of Output","value":"Per Minute"},{"label":"Hourly","value":"Hourly"},{"label":"Monthly Retainer","value":"Monthly Retainer"}]},
        {"id": "base_rate",     "label": "Base Rate (\u20b9)", "type": "number", "required": true, "placeholder": "Starting price in INR", "validation": {"min": 0}},
        {"id": "availability",  "label": "Availability",    "type": "select", "required": true,
          "options": [{"label":"Full-time","value":"Full-time"},{"label":"Part-time","value":"Part-time"},{"label":"Weekends Only","value":"Weekends Only"},{"label":"Flexible","value":"Flexible"}]}
      ]
    },
    {
      "id": "step_5_portfolio",
      "title": "Portfolio",
      "fields": [
        {"id": "portfolio_images", "label": "Work Thumbnails / Stills (up to 6)", "type": "file", "required": false, "multiple": true, "maxFiles": 6, "accept": "image/jpeg,image/jpg,image/png,image/webp", "maxSizeMB": 2, "helperText": "Upload video thumbnails or stills, max 2MB each."},
        {"id": "portfolio_url",    "label": "YouTube / Vimeo Portfolio Link",     "type": "url",  "required": true, "placeholder": "Link to your best video work"},
        {"id": "portfolio_note",   "label": "Portfolio Note",                     "type": "textarea", "placeholder": "Describe your editing style and best projects"}
      ]
    },
    {
      "id": "step_6_verification",
      "title": "Identity Verification",
      "fields": [
        {"id": "id_type",            "label": "ID Type",   "type": "select", "required": true,
          "options": [{"label":"Aadhaar Card","value":"Aadhaar Card"},{"label":"PAN Card","value":"PAN Card"},{"label":"Driving License","value":"Driving License"},{"label":"Voter ID","value":"Voter ID"},{"label":"Passport","value":"Passport"}]},
        {"id": "id_number",          "label": "ID Number", "type": "text",   "required": true, "placeholder": "Enter ID Number"},
        {"id": "id_document_upload", "label": "Upload ID Document", "type": "file", "required": true, "multiple": true, "maxFiles": 2, "accept": "application/pdf,image/jpeg,image/jpg,image/png", "maxSizeMB": 2}
      ]
    }
  ]
}$json$::jsonb, 2, true
FROM roles WHERE key = 'VIDEO_EDITOR'
ON CONFLICT (role_id, is_active) DO UPDATE SET schema_json = EXCLUDED.schema_json, version = EXCLUDED.version;

-- GRAPHIC_DESIGNER (6 steps)
INSERT INTO onboarding_configs (role_id, schema_json, version, is_active)
SELECT id, $json${
  "steps": [
    {
      "id": "step_1_profile",
      "title": "Profile Details",
      "fields": [
        {"id": "full_name",  "label": "Full Name",          "type": "text",     "required": true, "placeholder": "Your full name"},
        {"id": "experience", "label": "Experience (Years)", "type": "number",   "required": true, "validation": {"min": 0}},
        {"id": "bio",        "label": "Bio",                "type": "textarea", "required": true, "placeholder": "Hi, I am a graphic designer specializing in..."}
      ]
    },
    {
      "id": "step_2_contact",
      "title": "Contact and Location",
      "fields": [
        {"id": "email", "label": "Email",        "type": "email", "required": true},
        {"id": "phone", "label": "Phone Number", "type": "tel",   "required": true, "placeholder": "10-digit mobile number", "validation": {"pattern": "^[0-9]{10}$", "minLength": 10, "maxLength": 10}},
        {"id": "city",  "label": "City",         "type": "text",  "required": true, "readOnly": true, "defaultValue": "Chennai, India"}
      ]
    },
    {
      "id": "step_3_specialization",
      "title": "Design Specialization",
      "fields": [
        {"id": "design_tools",      "label": "Design Tools",      "type": "select", "required": true, "multiple": true,
          "options": [{"label":"Figma","value":"Figma"},{"label":"Adobe Illustrator","value":"Adobe Illustrator"},{"label":"Adobe Photoshop","value":"Adobe Photoshop"},{"label":"Canva Pro","value":"Canva Pro"},{"label":"Adobe InDesign","value":"Adobe InDesign"}]},
        {"id": "design_specialties","label": "Design Specialties","type": "select", "required": true, "multiple": true,
          "options": [{"label":"Branding/Logo","value":"Branding/Logo"},{"label":"UI/UX Design","value":"UI/UX"},{"label":"Print Media","value":"Print Media"},{"label":"Social Media Graphics","value":"Social Media"},{"label":"Motion Graphics","value":"Motion Graphics"}]},
        {"id": "style_note",        "label": "Design Style",      "type": "text",   "required": false, "placeholder": "e.g., Minimalist, Bold, Illustrative"}
      ]
    },
    {
      "id": "step_4_pricing",
      "title": "Pricing and Availability",
      "fields": [
        {"id": "pricing_model", "label": "Pricing Model",   "type": "select", "required": true,
          "options": [{"label":"Per Design/Asset","value":"Per Design"},{"label":"Per Project","value":"Per Project"},{"label":"Hourly","value":"Hourly"},{"label":"Monthly Retainer","value":"Monthly Retainer"}]},
        {"id": "base_rate",     "label": "Base Rate (\u20b9)", "type": "number", "required": true, "placeholder": "Starting price in INR", "validation": {"min": 0}},
        {"id": "availability",  "label": "Availability",    "type": "select", "required": true,
          "options": [{"label":"Full-time","value":"Full-time"},{"label":"Part-time","value":"Part-time"},{"label":"Weekends Only","value":"Weekends Only"},{"label":"Flexible","value":"Flexible"}]}
      ]
    },
    {
      "id": "step_5_portfolio",
      "title": "Portfolio",
      "fields": [
        {"id": "portfolio_images", "label": "Design Samples (up to 6)", "type": "file", "required": true, "multiple": true, "maxFiles": 6, "accept": "image/jpeg,image/jpg,image/png,image/webp", "maxSizeMB": 2, "helperText": "Upload your best design work, max 2MB each. Displayed in 3\u00d72 grid."},
        {"id": "portfolio_url",    "label": "Behance / Dribbble / Portfolio URL", "type": "url", "required": false, "placeholder": "https://behance.net/yourprofile"},
        {"id": "portfolio_note",   "label": "Portfolio Note",                     "type": "textarea", "placeholder": "Describe your design philosophy and best projects"}
      ]
    },
    {
      "id": "step_6_verification",
      "title": "Identity Verification",
      "fields": [
        {"id": "id_type",            "label": "ID Type",   "type": "select", "required": true,
          "options": [{"label":"Aadhaar Card","value":"Aadhaar Card"},{"label":"PAN Card","value":"PAN Card"},{"label":"Driving License","value":"Driving License"},{"label":"Voter ID","value":"Voter ID"},{"label":"Passport","value":"Passport"}]},
        {"id": "id_number",          "label": "ID Number", "type": "text",   "required": true, "placeholder": "Enter ID Number"},
        {"id": "id_document_upload", "label": "Upload ID Document", "type": "file", "required": true, "multiple": true, "maxFiles": 2, "accept": "application/pdf,image/jpeg,image/jpg,image/png", "maxSizeMB": 2}
      ]
    }
  ]
}$json$::jsonb, 2, true
FROM roles WHERE key = 'GRAPHIC_DESIGNER'
ON CONFLICT (role_id, is_active) DO UPDATE SET schema_json = EXCLUDED.schema_json, version = EXCLUDED.version;

-- SOCIAL_MEDIA_MANAGER (6 steps)
INSERT INTO onboarding_configs (role_id, schema_json, version, is_active)
SELECT id, $json${
  "steps": [
    {
      "id": "step_1_profile",
      "title": "Profile Details",
      "fields": [
        {"id": "full_name",  "label": "Full Name",          "type": "text",     "required": true, "placeholder": "Your full name"},
        {"id": "experience", "label": "Experience (Years)", "type": "number",   "required": true, "validation": {"min": 0}},
        {"id": "bio",        "label": "Bio",                "type": "textarea", "required": true, "placeholder": "Hi, I am a social media manager specializing in..."}
      ]
    },
    {
      "id": "step_2_contact",
      "title": "Contact and Location",
      "fields": [
        {"id": "email", "label": "Email",        "type": "email", "required": true},
        {"id": "phone", "label": "Phone Number", "type": "tel",   "required": true, "placeholder": "10-digit mobile number", "validation": {"pattern": "^[0-9]{10}$", "minLength": 10, "maxLength": 10}},
        {"id": "city",  "label": "City",         "type": "text",  "required": true, "readOnly": true, "defaultValue": "Chennai, India"}
      ]
    },
    {
      "id": "step_3_specialization",
      "title": "Social Media Specialization",
      "fields": [
        {"id": "platforms_managed", "label": "Platforms Managed", "type": "select", "required": true, "multiple": true,
          "options": [{"label":"Instagram","value":"Instagram"},{"label":"LinkedIn","value":"LinkedIn"},{"label":"Facebook","value":"Facebook"},{"label":"X/Twitter","value":"X/Twitter"},{"label":"YouTube","value":"YouTube"},{"label":"Pinterest","value":"Pinterest"}]},
        {"id": "content_types",     "label": "Content Types",     "type": "select", "required": true, "multiple": true,
          "options": [{"label":"Graphics/Creatives","value":"Graphics"},{"label":"Reels/Short Videos","value":"Reels"},{"label":"Copywriting/Captions","value":"Copywriting"},{"label":"Stories","value":"Stories"},{"label":"Analytics & Reports","value":"Analytics"}]},
        {"id": "tools_used",        "label": "Tools Used",        "type": "text",   "required": true, "placeholder": "e.g., Canva, Hootsuite, Buffer, Meta Business Suite"}
      ]
    },
    {
      "id": "step_4_pricing",
      "title": "Pricing and Availability",
      "fields": [
        {"id": "pricing_model", "label": "Pricing Model",   "type": "select", "required": true,
          "options": [{"label":"Monthly Retainer","value":"Monthly Retainer"},{"label":"Per Platform","value":"Per Platform"},{"label":"Per Post","value":"Per Post"},{"label":"Custom Package","value":"Custom Package"}]},
        {"id": "base_rate",     "label": "Base Rate (\u20b9)", "type": "number", "required": true, "placeholder": "Starting price in INR", "validation": {"min": 0}},
        {"id": "availability",  "label": "Availability",    "type": "select", "required": true,
          "options": [{"label":"Full-time","value":"Full-time"},{"label":"Part-time","value":"Part-time"},{"label":"Flexible","value":"Flexible"}]}
      ]
    },
    {
      "id": "step_5_portfolio",
      "title": "Portfolio",
      "fields": [
        {"id": "portfolio_images", "label": "Content Samples (up to 6)", "type": "file", "required": true, "multiple": true, "maxFiles": 6, "accept": "image/jpeg,image/jpg,image/png,image/webp", "maxSizeMB": 2, "helperText": "Upload posts, stories, or analytics screenshots, max 2MB each."},
        {"id": "portfolio_url",    "label": "Sample Brand Account URL",  "type": "url",  "required": false, "placeholder": "Instagram/LinkedIn page you manage"},
        {"id": "portfolio_note",   "label": "Portfolio Note",            "type": "textarea", "placeholder": "Describe brands you have worked with and results achieved"}
      ]
    },
    {
      "id": "step_6_verification",
      "title": "Identity Verification",
      "fields": [
        {"id": "id_type",            "label": "ID Type",   "type": "select", "required": true,
          "options": [{"label":"Aadhaar Card","value":"Aadhaar Card"},{"label":"PAN Card","value":"PAN Card"},{"label":"Driving License","value":"Driving License"},{"label":"Voter ID","value":"Voter ID"},{"label":"Passport","value":"Passport"}]},
        {"id": "id_number",          "label": "ID Number", "type": "text",   "required": true, "placeholder": "Enter ID Number"},
        {"id": "id_document_upload", "label": "Upload ID Document", "type": "file", "required": true, "multiple": true, "maxFiles": 2, "accept": "application/pdf,image/jpeg,image/jpg,image/png", "maxSizeMB": 2}
      ]
    }
  ]
}$json$::jsonb, 2, true
FROM roles WHERE key = 'SOCIAL_MEDIA_MANAGER'
ON CONFLICT (role_id, is_active) DO UPDATE SET schema_json = EXCLUDED.schema_json, version = EXCLUDED.version;

-- FITNESS_TRAINER (6 steps)
INSERT INTO onboarding_configs (role_id, schema_json, version, is_active)
SELECT id, $json${
  "steps": [
    {
      "id": "step_1_profile",
      "title": "Profile Details",
      "fields": [
        {"id": "full_name",  "label": "Full Name",          "type": "text",     "required": true, "placeholder": "Your full name"},
        {"id": "experience", "label": "Experience (Years)", "type": "number",   "required": true, "validation": {"min": 0}},
        {"id": "bio",        "label": "Bio",                "type": "textarea", "required": true, "placeholder": "Hi, I am a fitness trainer specializing in..."}
      ]
    },
    {
      "id": "step_2_contact",
      "title": "Contact and Location",
      "fields": [
        {"id": "email", "label": "Email",        "type": "email", "required": true},
        {"id": "phone", "label": "Phone Number", "type": "tel",   "required": true, "placeholder": "10-digit mobile number", "validation": {"pattern": "^[0-9]{10}$", "minLength": 10, "maxLength": 10}},
        {"id": "city",  "label": "City",         "type": "text",  "required": true, "readOnly": true, "defaultValue": "Chennai, India"}
      ]
    },
    {
      "id": "step_3_specialization",
      "title": "Training Specialization",
      "fields": [
        {"id": "training_specialties", "label": "Training Specialties", "type": "select", "required": true, "multiple": true,
          "options": [{"label":"Weight Loss","value":"Weight Loss"},{"label":"Muscle Gain","value":"Muscle Gain"},{"label":"HIIT","value":"HIIT"},{"label":"Yoga/Flexibility","value":"Yoga/Flexibility"},{"label":"CrossFit","value":"CrossFit"},{"label":"Sports-specific","value":"Sports-specific"},{"label":"Rehabilitation","value":"Rehabilitation"}]},
        {"id": "certifications",       "label": "Certifications",       "type": "text",   "required": false, "placeholder": "e.g., ACE CPT, NASM CPT, RYT-200"},
        {"id": "training_mode",        "label": "Training Mode",        "type": "select", "required": true,
          "options": [{"label":"Online/Virtual","value":"Online"},{"label":"In-person (Client's location)","value":"In-person"},{"label":"Both Online and In-person","value":"Both"}]}
      ]
    },
    {
      "id": "step_4_pricing",
      "title": "Pricing and Availability",
      "fields": [
        {"id": "pricing_model", "label": "Pricing Model",   "type": "select", "required": true,
          "options": [{"label":"Per Session","value":"Per Session"},{"label":"Monthly Package","value":"Monthly Package"},{"label":"Quarterly Package","value":"Quarterly Package"},{"label":"Custom","value":"Custom"}]},
        {"id": "base_rate",     "label": "Base Rate (\u20b9)", "type": "number", "required": true, "placeholder": "Starting price in INR", "validation": {"min": 0}},
        {"id": "availability",  "label": "Availability",    "type": "select", "required": true,
          "options": [{"label":"Early Morning (5-8 AM)","value":"Early Morning"},{"label":"Morning (8-12 PM)","value":"Morning"},{"label":"Evening (5-9 PM)","value":"Evening"},{"label":"Flexible","value":"Flexible"}]}
      ]
    },
    {
      "id": "step_5_portfolio",
      "title": "Portfolio",
      "fields": [
        {"id": "portfolio_images", "label": "Transformation Photos / Certificates (up to 6)", "type": "file", "required": false, "multiple": true, "maxFiles": 6, "accept": "image/jpeg,image/jpg,image/png,image/webp", "maxSizeMB": 2, "helperText": "Upload client transformation photos or certification images, max 2MB each."},
        {"id": "portfolio_url",    "label": "Instagram / YouTube Channel",                    "type": "url",  "required": false, "placeholder": "Your fitness social media or YouTube link"},
        {"id": "portfolio_note",   "label": "Portfolio Note",                                 "type": "textarea", "placeholder": "Describe your training philosophy and client success stories"}
      ]
    },
    {
      "id": "step_6_verification",
      "title": "Identity Verification",
      "fields": [
        {"id": "id_type",            "label": "ID Type",   "type": "select", "required": true,
          "options": [{"label":"Aadhaar Card","value":"Aadhaar Card"},{"label":"PAN Card","value":"PAN Card"},{"label":"Driving License","value":"Driving License"},{"label":"Voter ID","value":"Voter ID"},{"label":"Passport","value":"Passport"}]},
        {"id": "id_number",          "label": "ID Number", "type": "text",   "required": true, "placeholder": "Enter ID Number"},
        {"id": "id_document_upload", "label": "Upload ID Document", "type": "file", "required": true, "multiple": true, "maxFiles": 2, "accept": "application/pdf,image/jpeg,image/jpg,image/png", "maxSizeMB": 2}
      ]
    }
  ]
}$json$::jsonb, 2, true
FROM roles WHERE key = 'FITNESS_TRAINER'
ON CONFLICT (role_id, is_active) DO UPDATE SET schema_json = EXCLUDED.schema_json, version = EXCLUDED.version;

-- CATERING_SERVICES (6 steps)
INSERT INTO onboarding_configs (role_id, schema_json, version, is_active)
SELECT id, $json${
  "steps": [
    {
      "id": "step_1_profile",
      "title": "Profile Details",
      "fields": [
        {"id": "full_name",     "label": "Full Name / Business Name", "type": "text",     "required": true, "placeholder": "Your name or catering business name"},
        {"id": "experience",    "label": "Experience (Years)",        "type": "number",   "required": true, "validation": {"min": 0}},
        {"id": "bio",           "label": "Bio",                       "type": "textarea", "required": true, "placeholder": "Tell us about your catering business and specialties..."}
      ]
    },
    {
      "id": "step_2_contact",
      "title": "Contact and Location",
      "fields": [
        {"id": "email", "label": "Email",        "type": "email", "required": true},
        {"id": "phone", "label": "Phone Number", "type": "tel",   "required": true, "placeholder": "10-digit mobile number", "validation": {"pattern": "^[0-9]{10}$", "minLength": 10, "maxLength": 10}},
        {"id": "city",  "label": "City",         "type": "text",  "required": true, "readOnly": true, "defaultValue": "Chennai, India"}
      ]
    },
    {
      "id": "step_3_specialization",
      "title": "Catering Specialization",
      "fields": [
        {"id": "cuisine_types",    "label": "Cuisine Types",    "type": "select", "required": true, "multiple": true,
          "options": [{"label":"South Indian","value":"South Indian"},{"label":"North Indian","value":"North Indian"},{"label":"Continental","value":"Continental"},{"label":"Chinese","value":"Chinese"},{"label":"Fusion","value":"Fusion"},{"label":"Biryani/Mughlai","value":"Biryani/Mughlai"}]},
        {"id": "dietary_options",  "label": "Dietary Options",  "type": "select", "required": true, "multiple": true,
          "options": [{"label":"Pure Veg","value":"Pure Veg"},{"label":"Non-Veg","value":"Non-Veg"},{"label":"Vegan","value":"Vegan"},{"label":"Jain","value":"Jain"}]},
        {"id": "max_capacity",     "label": "Max Capacity (Plates/Guests)", "type": "number", "required": true, "placeholder": "Maximum plates per event", "validation": {"min": 1}}
      ]
    },
    {
      "id": "step_4_pricing",
      "title": "Pricing and Availability",
      "fields": [
        {"id": "pricing_model", "label": "Pricing Model",   "type": "select", "required": true,
          "options": [{"label":"Per Plate","value":"Per Plate"},{"label":"Per Event","value":"Per Event"},{"label":"Package-based","value":"Package-based"},{"label":"Custom Quote","value":"Custom Quote"}]},
        {"id": "base_rate",     "label": "Base Rate (\u20b9)", "type": "number", "required": true, "placeholder": "Starting price (e.g., per plate or per event)", "validation": {"min": 0}},
        {"id": "advance_notice","label": "Advance Notice Required", "type": "select", "required": true,
          "options": [{"label":"24 hours","value":"24 hours"},{"label":"2-3 days","value":"2-3 days"},{"label":"1 week","value":"1 week"},{"label":"2+ weeks","value":"2+ weeks"}]}
      ]
    },
    {
      "id": "step_5_portfolio",
      "title": "Portfolio",
      "fields": [
        {"id": "portfolio_images", "label": "Food / Event Photos (up to 6)", "type": "file", "required": true, "multiple": true, "maxFiles": 6, "accept": "image/jpeg,image/jpg,image/png,image/webp", "maxSizeMB": 2, "helperText": "Upload your best food and event photos, max 2MB each. Displayed in 3\u00d72 grid."},
        {"id": "portfolio_url",    "label": "Instagram / Google Business URL", "type": "url", "required": false, "placeholder": "Your food page or Google Business listing"},
        {"id": "portfolio_note",   "label": "Portfolio Note",                  "type": "textarea", "placeholder": "Describe your specialty dishes and memorable events you have catered"}
      ]
    },
    {
      "id": "step_6_verification",
      "title": "Identity Verification",
      "fields": [
        {"id": "id_type",            "label": "ID Type",   "type": "select", "required": true,
          "options": [{"label":"Aadhaar Card","value":"Aadhaar Card"},{"label":"PAN Card","value":"PAN Card"},{"label":"Driving License","value":"Driving License"},{"label":"Voter ID","value":"Voter ID"},{"label":"Passport","value":"Passport"}]},
        {"id": "id_number",          "label": "ID Number", "type": "text",   "required": true, "placeholder": "Enter ID Number"},
        {"id": "id_document_upload", "label": "Upload ID Document", "type": "file", "required": true, "multiple": true, "maxFiles": 2, "accept": "application/pdf,image/jpeg,image/jpg,image/png", "maxSizeMB": 2}
      ]
    }
  ]
}$json$::jsonb, 2, true
FROM roles WHERE key = 'CATERING_SERVICES'
ON CONFLICT (role_id, is_active) DO UPDATE SET schema_json = EXCLUDED.schema_json, version = EXCLUDED.version;

-- ── 4. Default Dashboard Configs ─────────────────────────────────────────────

INSERT INTO dashboard_configs (role_id, audience, config_json, version, is_active)
SELECT r.id,
  'EXTERNAL',
  jsonb_build_object(
    'nav', CASE r.key
      WHEN 'COMPANY' THEN '[
        {"key": "jobs", "label": "My Jobs", "path": "/dashboard/jobs", "icon": "briefcase"},
        {"key": "applications", "label": "Applications", "path": "/dashboard/applications", "icon": "users"},
        {"key": "profile", "label": "Company Profile", "path": "/dashboard/profile", "icon": "building"}
      ]'::jsonb
      WHEN 'JOB_SEEKER' THEN '[
        {"key": "browse_jobs", "label": "Browse Jobs", "path": "/dashboard/jobs", "icon": "search"},
        {"key": "my_applications", "label": "My Applications", "path": "/dashboard/applications", "icon": "file-text"},
        {"key": "profile", "label": "My Profile", "path": "/dashboard/profile", "icon": "user"}
      ]'::jsonb
      WHEN 'CUSTOMER' THEN '[
        {"key": "requirements", "label": "My Requirements", "path": "/dashboard/requirements", "icon": "list"},
        {"key": "profile", "label": "My Profile", "path": "/dashboard/profile", "icon": "user"}
      ]'::jsonb
      ELSE '[
        {"key": "marketplace", "label": "Marketplace", "path": "/dashboard/marketplace", "icon": "store"},
        {"key": "leads", "label": "My Leads", "path": "/dashboard/leads", "icon": "zap"},
        {"key": "portfolio", "label": "Portfolio", "path": "/dashboard/portfolio", "icon": "image"},
        {"key": "services", "label": "Services", "path": "/dashboard/services", "icon": "list"},
        {"key": "wallet", "label": "Wallet", "path": "/dashboard/wallet", "icon": "wallet"},
        {"key": "profile", "label": "My Profile", "path": "/dashboard/profile", "icon": "user"}
      ]'::jsonb
    END,
    'enabled_modules', CASE r.key
      WHEN 'COMPANY' THEN '["jobs", "applications", "profile"]'::jsonb
      WHEN 'JOB_SEEKER' THEN '["browse_jobs", "my_applications", "profile"]'::jsonb
      WHEN 'CUSTOMER' THEN '["requirements", "profile"]'::jsonb
      ELSE '["marketplace", "leads", "portfolio", "services", "wallet", "profile"]'::jsonb
    END
  ),
  1,
  true
FROM roles r
WHERE r.audience = 'EXTERNAL'
ON CONFLICT (role_id, is_active) DO NOTHING;

-- ── Done ──────────────────────────────────────────────────────────────────────
SELECT 'Seed completed successfully.' AS status;
