import type { RoleGroups, RoleTaskDefinition } from "@/lib/types";

const TASKS: Record<string, RoleTaskDefinition> = {
  "draft-social-post": {
    id: "draft-social-post",
    title: "Draft social post for top opportunity",
    description: "Write and queue a post tied to today's highest-value play.",
    integrationTarget: "Mock: Meta / LinkedIn scheduler",
    estimatedMinutes: 15,
  },
  "geo-ad-copy": {
    id: "geo-ad-copy",
    title: "Prepare geo-targeted ad copy",
    description: "Generate headlines, body, and CTA for local ad campaigns.",
    integrationTarget: "Mock: Google Ads / Meta Ads",
    estimatedMinutes: 20,
  },
  "landing-headline": {
    id: "landing-headline",
    title: "Update landing page headline",
    description: "Draft conversion-focused headline aligned to current offer.",
    integrationTarget: "Mock: Website CMS",
    estimatedMinutes: 10,
  },
  "review-responses": {
    id: "review-responses",
    title: "Draft review responses",
    description: "Write personalized replies for pending Google/Yelp reviews.",
    integrationTarget: "Mock: Google Business Profile",
    estimatedMinutes: 15,
  },
  "review-requests": {
    id: "review-requests",
    title: "Send review request batch",
    description: "Text/email recent customers with review links.",
    integrationTarget: "Mock: SMS / Email (Twilio, SendGrid)",
    estimatedMinutes: 10,
  },
  "reputation-report": {
    id: "reputation-report",
    title: "Compile reputation snapshot",
    description: "Summarize rating trend, volume gap vs competitors.",
    integrationTarget: "Mock: Review monitoring",
    estimatedMinutes: 5,
  },
  "outreach-dm": {
    id: "outreach-dm",
    title: "Personalized outreach messages",
    description: "Draft DMs/emails for hot leads and buyer opportunities.",
    integrationTarget: "Mock: CRM / LinkedIn",
    estimatedMinutes: 20,
  },
  "follow-up-sequence": {
    id: "follow-up-sequence",
    title: "Build follow-up sequence",
    description: "Create 3-touch follow-up for unanswered inquiries.",
    integrationTarget: "Mock: HubSpot / GoHighLevel",
    estimatedMinutes: 15,
  },
  "proposal-outline": {
    id: "proposal-outline",
    title: "Draft proposal / quote outline",
    description: "Structure offer, pricing tiers, and next-step CTA.",
    integrationTarget: "Mock: PandaDoc / Proposify",
    estimatedMinutes: 25,
  },
  "lead-callback-list": {
    id: "lead-callback-list",
    title: "Prioritize callback queue",
    description: "Rank voicemails and form leads by urgency and value.",
    integrationTarget: "Mock: Call tracking / CRM",
    estimatedMinutes: 10,
  },
  "schedule-optimization": {
    id: "schedule-optimization",
    title: "Optimize today's schedule",
    description: "Block high-value slots and flag conflicts.",
    integrationTarget: "Mock: Calendar / Field service software",
    estimatedMinutes: 15,
  },
  "ops-digest": {
    id: "ops-digest",
    title: "Send operations digest",
    description: "Daily summary of open jobs, SLAs, and bottlenecks.",
    integrationTarget: "Mock: Slack / Email",
    estimatedMinutes: 5,
  },
  "reactivation-sms": {
    id: "reactivation-sms",
    title: "Reactivation SMS campaign",
    description: "Personalized win-back texts to lapsed customers.",
    integrationTarget: "Mock: SMS (Twilio)",
    estimatedMinutes: 15,
  },
  "appointment-reminders": {
    id: "appointment-reminders",
    title: "Appointment reminders",
    description: "Confirm upcoming bookings and reduce no-shows.",
    integrationTarget: "Mock: SMS / Email",
    estimatedMinutes: 10,
  },
  "intake-summary": {
    id: "intake-summary",
    title: "Lead intake summary",
    description: "Compile new inquiries with recommended next actions.",
    integrationTarget: "Mock: CRM inbox",
    estimatedMinutes: 10,
  },
  "compliance-checklist": {
    id: "compliance-checklist",
    title: "Generate compliance checklist",
    description: "Audit-ready checklist for industry requirements.",
    integrationTarget: "Mock: Document store",
    estimatedMinutes: 15,
  },
  "rfp-doc-prep": {
    id: "rfp-doc-prep",
    title: "Prepare RFP documentation",
    description: "Gather required certs, pricing, and compliance docs.",
    integrationTarget: "Mock: Procurement portal",
    estimatedMinutes: 30,
  },
  "crm-audit": {
    id: "crm-audit",
    title: "CRM pipeline audit",
    description: "Identify stale deals and missing follow-ups.",
    integrationTarget: "Mock: HubSpot / Salesforce",
    estimatedMinutes: 15,
  },
  "automation-workflow": {
    id: "automation-workflow",
    title: "Draft automation workflow",
    description: "Map trigger → action for lead nurture or onboarding.",
    integrationTarget: "Mock: Zapier / Make",
    estimatedMinutes: 20,
  },
  "leader-priority-lock": {
    id: "leader-priority-lock",
    title: "Lock today's #1 priority",
    description: "Choose one revenue move and block everything else until it's done.",
    integrationTarget: "Mock: BrandLxft Action Center",
    estimatedMinutes: 5,
  },
  "leader-role-assignments": {
    id: "leader-role-assignments",
    title: "Assign work to role agents",
    description: "Delegate tasks to the right roles based on today's opportunity.",
    integrationTarget: "Mock: Role Agents orchestration",
    estimatedMinutes: 10,
  },
  "leader-accountability": {
    id: "leader-accountability",
    title: "Accountability check-in for you",
    description: "Direct message to the owner with deadlines and expectations.",
    integrationTarget: "Mock: Email / Slack DM",
    estimatedMinutes: 5,
  },
  "leader-standup-brief": {
    id: "leader-standup-brief",
    title: "Morning standup brief",
    description: "What happened, what's blocked, what ships before noon.",
    integrationTarget: "Mock: BrandLxft Dashboard",
    estimatedMinutes: 5,
  },
  "social-analysis-posts": {
    id: "social-analysis-posts",
    title: "Draft posts from social analysis",
    description: "3-post pack from visibility score, pick-share, and top social recommendations.",
    integrationTarget: "Mock: Meta Business Suite / Instagram",
    estimatedMinutes: 20,
  },
  "social-trust-sync": {
    id: "social-trust-sync",
    title: "Sync website & social trust messaging",
    description: "Align homepage and social content based on which channel builds more trust.",
    integrationTarget: "Mock: Meta / Website CMS",
    estimatedMinutes: 15,
  },
  "social-competitive-beat": {
    id: "social-competitive-beat",
    title: "Competitive comparison social post",
    description: "Draft post leveraging your pick-share % vs top competitor without naming them.",
    integrationTarget: "Mock: Meta / LinkedIn scheduler",
    estimatedMinutes: 15,
  },
};

function pick(...ids: Array<keyof typeof TASKS>): RoleTaskDefinition[] {
  return ids.map((id) => TASKS[id]).filter(Boolean);
}

export const AI_LEADER_TASKS: RoleTaskDefinition[] = pick(
  "leader-priority-lock",
  "leader-role-assignments",
  "leader-accountability",
  "leader-standup-brief",
);

/** Only roles with digital deliverables. First match wins — no generic fallback. */
const DIGITAL_ROLE_RULES: Array<{ match: RegExp; tasks: RoleTaskDefinition[] }> = [
  { match: /brandlxft ai leader|^ai leader$|ai boss/i, tasks: AI_LEADER_TASKS },
  { match: /local seo specialist/i, tasks: pick("geo-ad-copy", "landing-headline", "reputation-report") },
  { match: /reputation manager/i, tasks: pick("review-responses", "review-requests", "social-competitive-beat") },
  { match: /marketing manager|social media|ppc specialist|branding/i, tasks: pick("social-analysis-posts", "social-trust-sync", "draft-social-post") },
  { match: /referral coordinator/i, tasks: pick("outreach-dm", "follow-up-sequence", "intake-summary") },
  { match: /business development rep|\bbdr\b|\bsdr\b|sales development|part-time sdr/i, tasks: pick("outreach-dm", "follow-up-sequence", "crm-audit") },
  { match: /estimator|sales rep|account manager|catering sales|investor relations|comfortclub sales/i, tasks: pick("proposal-outline", "outreach-dm", "follow-up-sequence") },
  { match: /patient coordinator|treatment coordinator|care coordinator/i, tasks: pick("reactivation-sms", "appointment-reminders", "intake-summary") },
  { match: /insurance claim specialist/i, tasks: pick("rfp-doc-prep", "proposal-outline", "compliance-checklist") },
  { match: /transaction coordinator/i, tasks: pick("intake-summary", "follow-up-sequence", "compliance-checklist") },
  { match: /membership retention|retention specialist/i, tasks: pick("reactivation-sms", "follow-up-sequence", "appointment-reminders") },
  { match: /^dispatcher$/i, tasks: pick("lead-callback-list", "schedule-optimization", "ops-digest") },
  { match: /^scheduler$|scheduling coordinator/i, tasks: pick("schedule-optimization", "appointment-reminders", "intake-summary") },
  { match: /office manager|front desk|receptionist/i, tasks: pick("lead-callback-list", "intake-summary", "appointment-reminders") },
  { match: /billing specialist|insurance billing/i, tasks: pick("follow-up-sequence", "intake-summary", "crm-audit") },
  { match: /onboarding concierge|customer success/i, tasks: pick("follow-up-sequence", "intake-summary", "automation-workflow") },
  { match: /crm admin|ehr admin|field service software|telehealth coordinator|software admin/i, tasks: pick("crm-audit", "automation-workflow", "intake-summary") },
  { match: /hipaa compliance|credentialing specialist|compliance lead/i, tasks: pick("compliance-checklist", "rfp-doc-prep") },
];

const NON_DIGITAL_PATTERNS: RegExp[] = [
  /owner|general manager|project manager|practice manager|medical director|president|founder|ceo/i,
  /crew|technician|installer|provider|clinical|hygienist|dentist|physician|nurse|therapist/i,
  /inspector|safety manager|permit coordinator|chef|cook|server|trainer|coach/i,
  /licensed provider|roofing crew|crew lead|line cook|warehouse|delivery|driver|field tech/i,
  /realtor|buyer'?s agent|listing agent|real estate agent|buyer's agent/i,
];

function normalizeRoleName(roleName: string) {
  return roleName.trim();
}

export function isNonDigitalRole(roleName: string): boolean {
  return NON_DIGITAL_PATTERNS.some((p) => p.test(normalizeRoleName(roleName)));
}

export function isDigitallyAutomatable(roleName: string): boolean {
  if (isNonDigitalRole(roleName)) return false;
  return getTasksForRole(roleName).length > 0;
}

export function getTasksForRole(roleName: string): RoleTaskDefinition[] {
  const name = normalizeRoleName(roleName);
  if (isNonDigitalRole(name)) return [];

  for (const rule of DIGITAL_ROLE_RULES) {
    if (rule.match.test(name)) {
      return rule.tasks;
    }
  }
  return [];
}

export function getAiLeaderTasks(): RoleTaskDefinition[] {
  return AI_LEADER_TASKS;
}

export function getAllAutomatableRoles(
  roleGroups: RoleGroups,
): Array<{ role: string; group: keyof RoleGroups; tasks: RoleTaskDefinition[] }> {
  const entries: Array<{ role: string; group: keyof RoleGroups; tasks: RoleTaskDefinition[] }> = [];
  for (const group of Object.keys(roleGroups) as Array<keyof RoleGroups>) {
    for (const role of roleGroups[group]) {
      const tasks = getTasksForRole(role);
      if (tasks.length > 0) {
        entries.push({ role, group, tasks });
      }
    }
  }
  return entries;
}

export function countDigitalRoles(roleGroups: RoleGroups): { automatable: number; manual: number } {
  let automatable = 0;
  let manual = 0;
  for (const group of Object.values(roleGroups)) {
    for (const role of group) {
      if (isDigitallyAutomatable(role)) automatable += 1;
      else manual += 1;
    }
  }
  return { automatable, manual };
}
