export type RemovalMethod = "AUTOMATED" | "MANUAL_FORM" | "EMAIL" | "PHONE" | "MAIL" | "NONE";
export type BrokerCategory = "PEOPLE_SEARCH" | "BACKGROUND_CHECK" | "PUBLIC_RECORDS" | "REVERSE_LOOKUP" | "SOCIAL_MEDIA";

export interface BrokerEntry {
  name: string;
  domain: string;
  category: BrokerCategory;
  removalMethod: RemovalMethod;
  removalUrl: string;
  requiresAccount: boolean;
  requiresVerification: boolean;
  estimatedDays: number;
}

export const brokerRegistry: BrokerEntry[] = [
  {
    name: "Spokeo",
    domain: "spokeo.com",
    category: "PEOPLE_SEARCH",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://www.spokeo.com/optout",
    requiresAccount: false,
    requiresVerification: true,
    estimatedDays: 7,
  },
  {
    name: "WhitePages",
    domain: "whitepages.com",
    category: "PEOPLE_SEARCH",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://www.whitepages.com/suppression_choices",
    requiresAccount: false,
    requiresVerification: true,
    estimatedDays: 14,
  },
  {
    name: "Intelius",
    domain: "intelius.com",
    category: "PEOPLE_SEARCH",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://www.intelius.com/optout",
    requiresAccount: false,
    requiresVerification: true,
    estimatedDays: 14,
  },
  {
    name: "MyLife",
    domain: "mylife.com",
    category: "PEOPLE_SEARCH",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://www.mylife.com/optout",
    requiresAccount: true,
    requiresVerification: true,
    estimatedDays: 7,
  },
  {
    name: "Pipl",
    domain: "pipl.com",
    category: "PEOPLE_SEARCH",
    removalMethod: "EMAIL",
    removalUrl: "https://pipl.com/optout",
    requiresAccount: false,
    requiresVerification: false,
    estimatedDays: 30,
  },
  {
    name: "BeenVerified",
    domain: "beenverified.com",
    category: "BACKGROUND_CHECK",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://www.beenverified.com/optout",
    requiresAccount: false,
    requiresVerification: true,
    estimatedDays: 7,
  },
  {
    name: "TruthFinder",
    domain: "truthfinder.com",
    category: "BACKGROUND_CHECK",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://www.truthfinder.com/optout",
    requiresAccount: false,
    requiresVerification: true,
    estimatedDays: 7,
  },
  {
    name: "InstantCheckmate",
    domain: "instantcheckmate.com",
    category: "BACKGROUND_CHECK",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://www.instantcheckmate.com/optout",
    requiresAccount: false,
    requiresVerification: true,
    estimatedDays: 14,
  },
  {
    name: "PeopleFinders",
    domain: "peoplefinders.com",
    category: "PEOPLE_SEARCH",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://www.peoplefinders.com/optout",
    requiresAccount: false,
    requiresVerification: true,
    estimatedDays: 14,
  },
  {
    name: "Radaris",
    domain: "radaris.com",
    category: "PEOPLE_SEARCH",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://radaris.com/optout",
    requiresAccount: false,
    requiresVerification: false,
    estimatedDays: 14,
  },
  {
    name: "PeekYou",
    domain: "peekyou.com",
    category: "PEOPLE_SEARCH",
    removalMethod: "EMAIL",
    removalUrl: "https://www.peekyou.com/about/contact",
    requiresAccount: false,
    requiresVerification: false,
    estimatedDays: 14,
  },
  {
    name: "ZabaSearch",
    domain: "zabasearch.com",
    category: "PEOPLE_SEARCH",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://www.zabasearch.com/optout",
    requiresAccount: false,
    requiresVerification: false,
    estimatedDays: 7,
  },
  {
    name: "USSearch",
    domain: "ussearch.com",
    category: "PEOPLE_SEARCH",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://www.ussearch.com/optout",
    requiresAccount: false,
    requiresVerification: true,
    estimatedDays: 14,
  },
  {
    name: "CensusUSSearch",
    domain: "censusussearch.com",
    category: "PUBLIC_RECORDS",
    removalMethod: "EMAIL",
    removalUrl: "https://www.censusussearch.com/contact",
    requiresAccount: false,
    requiresVerification: false,
    estimatedDays: 14,
  },
  {
    name: "PublicRecordsNow",
    domain: "publicrecordsnow.com",
    category: "PUBLIC_RECORDS",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://www.publicrecordsnow.com/optout",
    requiresAccount: false,
    requiresVerification: false,
    estimatedDays: 14,
  },
  {
    name: "PeopleLooker",
    domain: "peoplelooker.com",
    category: "PEOPLE_SEARCH",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://www.peoplelooker.com/optout",
    requiresAccount: false,
    requiresVerification: true,
    estimatedDays: 7,
  },
  {
    name: "CheckPeople",
    domain: "checkpeople.com",
    category: "BACKGROUND_CHECK",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://www.checkpeople.com/optout",
    requiresAccount: false,
    requiresVerification: true,
    estimatedDays: 14,
  },
  {
    name: "GoLookUp",
    domain: "golookup.com",
    category: "PEOPLE_SEARCH",
    removalMethod: "EMAIL",
    removalUrl: "https://www.golookup.com/contact",
    requiresAccount: false,
    requiresVerification: false,
    estimatedDays: 21,
  },
  {
    name: "SearchPeopleFree",
    domain: "searchpeoplefree.com",
    category: "PEOPLE_SEARCH",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://www.searchpeoplefree.com/optout",
    requiresAccount: false,
    requiresVerification: false,
    estimatedDays: 14,
  },
  {
    name: "PeopleSearchNow",
    domain: "peoplesearchnow.com",
    category: "PEOPLE_SEARCH",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://www.peoplesearchnow.com/optout",
    requiresAccount: false,
    requiresVerification: false,
    estimatedDays: 14,
  },
  {
    name: "FastPeopleSearch",
    domain: "fastpeoplesearch.com",
    category: "PEOPLE_SEARCH",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://www.fastpeoplesearch.com/optout",
    requiresAccount: false,
    requiresVerification: false,
    estimatedDays: 7,
  },
  {
    name: "Addresses",
    domain: "addresses.com",
    category: "PUBLIC_RECORDS",
    removalMethod: "EMAIL",
    removalUrl: "https://www.addresses.com/contact",
    requiresAccount: false,
    requiresVerification: false,
    estimatedDays: 21,
  },
  {
    name: "CyberBackgroundChecks",
    domain: "cyberbackgroundchecks.com",
    category: "BACKGROUND_CHECK",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://www.cyberbackgroundchecks.com/remove",
    requiresAccount: false,
    requiresVerification: true,
    estimatedDays: 14,
  },
  {
    name: "CriminalPages",
    domain: "criminalpages.com",
    category: "PUBLIC_RECORDS",
    removalMethod: "EMAIL",
    removalUrl: "https://www.criminalpages.com/contact",
    requiresAccount: false,
    requiresVerification: false,
    estimatedDays: 21,
  },
  {
    name: "VoteBuilder",
    domain: "votebuilder.com",
    category: "PUBLIC_RECORDS",
    removalMethod: "EMAIL",
    removalUrl: "https://www.votebuilder.com/contact",
    requiresAccount: true,
    requiresVerification: true,
    estimatedDays: 30,
  },
  {
    name: "Acxiom",
    domain: "acxiom.com",
    category: "PUBLIC_RECORDS",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://www.acxiom.com/about-us/privacy/",
    requiresAccount: false,
    requiresVerification: true,
    estimatedDays: 30,
  },
  {
    name: "OptOutPrescreen",
    domain: "optoutprescreen.com",
    category: "PUBLIC_RECORDS",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://www.optoutprescreen.com",
    requiresAccount: false,
    requiresVerification: false,
    estimatedDays: 60,
  },
  {
    name: "Spoke",
    domain: "spoke.com",
    category: "PEOPLE_SEARCH",
    removalMethod: "EMAIL",
    removalUrl: "https://www.spoke.com/contact",
    requiresAccount: true,
    requiresVerification: false,
    estimatedDays: 14,
  },
  {
    name: "Yasni",
    domain: "yasni.com",
    category: "PEOPLE_SEARCH",
    removalMethod: "EMAIL",
    removalUrl: "https://www.yasni.com/en/info/contact.html",
    requiresAccount: false,
    requiresVerification: false,
    estimatedDays: 30,
  },
  {
    name: "CornerstoneInformationSystems",
    domain: "cornerstoneinformation.com",
    category: "BACKGROUND_CHECK",
    removalMethod: "EMAIL",
    removalUrl: "https://www.cornerstoneinformation.com/privacy",
    requiresAccount: false,
    requiresVerification: false,
    estimatedDays: 30,
  },
  {
    name: "LexisNexis",
    domain: "lexisnexis.com",
    category: "PUBLIC_RECORDS",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://www.lexisnexis.com/privacy/for-consumers/opt-out-of-lexisnexis-consumer-reports.aspx",
    requiresAccount: false,
    requiresVerification: true,
    estimatedDays: 30,
  },
  {
    name: "PeopleSmart",
    domain: "peoplesmart.com",
    category: "PEOPLE_SEARCH",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://www.peoplesmart.com/optout",
    requiresAccount: false,
    requiresVerification: true,
    estimatedDays: 7,
  },
  {
    name: "PrivateEye",
    domain: "privateeye.com",
    category: "BACKGROUND_CHECK",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://www.privateeye.com/optout",
    requiresAccount: false,
    requiresVerification: true,
    estimatedDays: 14,
  },
  {
    name: "FamilyTreeNow",
    domain: "familytreenow.com",
    category: "PUBLIC_RECORDS",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://www.familytreenow.com/optout",
    requiresAccount: false,
    requiresVerification: false,
    estimatedDays: 7,
  },
  {
    name: "NeighborReport",
    domain: "neighbor.report",
    category: "PUBLIC_RECORDS",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://neighbor.report/optout",
    requiresAccount: false,
    requiresVerification: false,
    estimatedDays: 14,
  },
  {
    name: "Classmates",
    domain: "classmates.com",
    category: "SOCIAL_MEDIA",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://www.classmates.com/optout",
    requiresAccount: true,
    requiresVerification: true,
    estimatedDays: 14,
  },
  {
    name: "Facebook",
    domain: "facebook.com",
    category: "SOCIAL_MEDIA",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://www.facebook.com/help/delete_account",
    requiresAccount: true,
    requiresVerification: true,
    estimatedDays: 30,
  },
  {
    name: "LinkedIn",
    domain: "linkedin.com",
    category: "SOCIAL_MEDIA",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://www.linkedin.com/help/linkedin/answer/63",
    requiresAccount: true,
    requiresVerification: true,
    estimatedDays: 14,
  },
  {
    name: "Twitter",
    domain: "twitter.com",
    category: "SOCIAL_MEDIA",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://help.twitter.com/en/managing-your-account/how-to-deactivate",
    requiresAccount: true,
    requiresVerification: true,
    estimatedDays: 30,
  },
  {
    name: "Instagram",
    domain: "instagram.com",
    category: "SOCIAL_MEDIA",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://help.instagram.com/370452623149242",
    requiresAccount: true,
    requiresVerification: true,
    estimatedDays: 30,
  },
  {
    name: "Snapchat",
    domain: "snapchat.com",
    category: "SOCIAL_MEDIA",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://support.snapchat.com/en-US/a/delete-my-account",
    requiresAccount: true,
    requiresVerification: true,
    estimatedDays: 30,
  },
  {
    name: "TikTok",
    domain: "tiktok.com",
    category: "SOCIAL_MEDIA",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://www.tiktok.com/legal/report/privacy",
    requiresAccount: true,
    requiresVerification: true,
    estimatedDays: 30,
  },
  {
    name: "Pinterest",
    domain: "pinterest.com",
    category: "SOCIAL_MEDIA",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://help.pinterest.com/en/article/delete-your-account",
    requiresAccount: true,
    requiresVerification: true,
    estimatedDays: 14,
  },
  {
    name: "Reddit",
    domain: "reddit.com",
    category: "SOCIAL_MEDIA",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://www.reddit.com/settings/delete",
    requiresAccount: true,
    requiresVerification: true,
    estimatedDays: 7,
  },
  {
    name: "YouTube",
    domain: "youtube.com",
    category: "SOCIAL_MEDIA",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://support.google.com/youtube/answer/56111",
    requiresAccount: true,
    requiresVerification: true,
    estimatedDays: 30,
  },
  {
    name: "Ancestry",
    domain: "ancestry.com",
    category: "PUBLIC_RECORDS",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://www.ancestry.com/cs/legal/optout",
    requiresAccount: true,
    requiresVerification: true,
    estimatedDays: 14,
  },
  {
    name: "MyHeritage",
    domain: "myheritage.com",
    category: "PUBLIC_RECORDS",
    removalMethod: "EMAIL",
    removalUrl: "https://www.myheritage.com/optout",
    requiresAccount: true,
    requiresVerification: true,
    estimatedDays: 14,
  },
  {
    name: "WhitepagesAU",
    domain: "whitepages.com.au",
    category: "PUBLIC_RECORDS",
    removalMethod: "EMAIL",
    removalUrl: "https://www.whitepages.com.au/privacy",
    requiresAccount: false,
    requiresVerification: false,
    estimatedDays: 30,
  },
  {
    name: "NumberGuru",
    domain: "numberguru.com",
    category: "REVERSE_LOOKUP",
    removalMethod: "EMAIL",
    removalUrl: "https://www.numberguru.com/contact",
    requiresAccount: false,
    requiresVerification: false,
    estimatedDays: 30,
  },
  {
    name: "ReversePhoneLookup",
    domain: "reversephonelookup.com",
    category: "REVERSE_LOOKUP",
    removalMethod: "MANUAL_FORM",
    removalUrl: "https://www.reversephonelookup.com/optout",
    requiresAccount: false,
    requiresVerification: false,
    estimatedDays: 14,
  },
];

export function getActiveBrokers(): BrokerEntry[] {
  return brokerRegistry;
}

export function getBrokerByDomain(domain: string): BrokerEntry | undefined {
  return brokerRegistry.find((b) => b.domain === domain);
}

export function getBrokerByName(name: string): BrokerEntry | undefined {
  return brokerRegistry.find((b) => b.name === name);
}
