/**
 * Column-name mappings for each source system.
 *
 * Each entry is: { soiField: string[], ... }
 * where the array lists all known column headers that source system uses
 * for that field (case-insensitive match at runtime).
 *
 * TABS3 reference: TABS3/PracticeMaster v20+ CSV export schema
 * LegalTrek reference: LegalTrek v2 export (English + Thai headers)
 */

export type SoiClientField =
  | 'externalId'
  | 'clientType'
  | 'firstName'
  | 'lastName'
  | 'companyName'
  | 'email'
  | 'phone'
  | 'address'
  | 'nationality'
  | 'passportNumber'
  | 'responsibleAttorney'
  | 'originatingAttorney'
  | 'status'
  | 'engagementDate'
  | 'notes'

export type SoiMatterField =
  | 'externalClientId'
  | 'externalMatterId'
  | 'title'
  | 'practiceArea'
  | 'subType'
  | 'status'
  | 'responsibleAttorney'
  | 'openedAt'
  | 'closedAt'
  | 'notes'

// ── TABS3 ─────────────────────────────────────────────────────────────────────

export const TABS3_CLIENT_MAP: Record<SoiClientField, string[]> = {
  externalId:          ['client_id', 'clientid', 'client id', 'id'],
  clientType:          ['client_type', 'type', 'entity_type'],
  firstName:           ['first_name', 'firstname', 'first', 'given_name'],
  lastName:            ['last_name', 'lastname', 'last', 'surname'],
  companyName:         ['company', 'company_name', 'firm_name', 'organization', 'name'],
  email:               ['email', 'email_address', 'e_mail', 'e-mail'],
  phone:               ['phone', 'phone_1', 'phone1', 'telephone', 'tel', 'business_phone', 'home_phone'],
  address:             ['address', 'address1', 'address_1', 'street', 'street_address'],
  nationality:         ['nationality', 'country'],
  passportNumber:      ['passport', 'passport_number', 'passport_no', 'id_number'],
  responsibleAttorney: ['resp_atty', 'responsible_atty', 'responsible_attorney', 'resp_timekeeper', 'attorney'],
  originatingAttorney: ['orig_atty', 'originating_atty', 'originating_attorney', 'orig_timekeeper'],
  status:              ['status', 'client_status'],
  engagementDate:      ['open_date', 'opened', 'date_opened', 'engagement_date', 'start_date'],
  notes:               ['notes', 'comments', 'memo', 'description'],
}

export const TABS3_MATTER_MAP: Record<SoiMatterField, string[]> = {
  externalClientId:    ['client_id', 'clientid', 'client id'],
  externalMatterId:    ['matter_id', 'matterid', 'matter id', 'matter_number', 'id'],
  title:               ['description', 'matter_description', 'matter_name', 'name', 'title'],
  practiceArea:        ['work_type', 'worktype', 'practice_area', 'area_of_law', 'category'],
  subType:             ['sub_type', 'subtype', 'matter_type', 'type'],
  status:              ['status', 'matter_status'],
  responsibleAttorney: ['resp_atty', 'responsible_atty', 'responsible_attorney', 'resp_timekeeper', 'attorney'],
  openedAt:            ['open_date', 'opened', 'date_opened', 'start_date'],
  closedAt:            ['close_date', 'closed', 'date_closed', 'end_date'],
  notes:               ['notes', 'comments', 'memo'],
}

// ── LegalTrek ─────────────────────────────────────────────────────────────────

export const LEGALTREK_CLIENT_MAP: Record<SoiClientField, string[]> = {
  externalId:          ['client_id', 'client_number', 'id', 'เลขที่ลูกความ', 'รหัสลูกความ'],
  clientType:          ['client_type', 'type', 'ประเภท', 'ประเภทลูกความ'],
  firstName:           ['first_name', 'firstname', 'ชื่อ'],
  lastName:            ['last_name', 'lastname', 'นามสกุล'],
  companyName:         ['company', 'company_name', 'name', 'client_name', 'ชื่อบริษัท', 'ชื่อ-นามสกุล', 'ชื่อลูกความ'],
  email:               ['email', 'email_address', 'อีเมล', 'อีเมล์'],
  phone:               ['phone', 'mobile', 'tel', 'telephone', 'โทรศัพท์', 'มือถือ'],
  address:             ['address', 'ที่อยู่'],
  nationality:         ['nationality', 'สัญชาติ'],
  passportNumber:      ['passport', 'passport_number', 'id_number', 'เลขหนังสือเดินทาง', 'เลขบัตรประชาชน'],
  responsibleAttorney: ['attorney', 'responsible_attorney', 'lawyer', 'ทนายความ', 'ทนายความผู้รับผิดชอบ'],
  originatingAttorney: ['originating_attorney', 'orig_attorney'],
  status:              ['status', 'สถานะ'],
  engagementDate:      ['open_date', 'start_date', 'วันที่เปิด', 'วันที่รับเป็นลูกความ'],
  notes:               ['notes', 'remarks', 'หมายเหตุ', 'บันทึก'],
}

export const LEGALTREK_MATTER_MAP: Record<SoiMatterField, string[]> = {
  externalClientId:    ['client_id', 'client_number', 'เลขที่ลูกความ', 'รหัสลูกความ'],
  externalMatterId:    ['matter_id', 'case_id', 'case_number', 'เลขที่คดี', 'รหัสคดี'],
  title:               ['matter_title', 'case_title', 'case_name', 'title', 'description', 'ชื่อคดี', 'รายละเอียดคดี'],
  practiceArea:        ['practice_area', 'case_type', 'area', 'category', 'ประเภทคดี', 'สาขา'],
  subType:             ['sub_type', 'case_sub_type', 'ประเภทย่อย'],
  status:              ['status', 'สถานะ', 'สถานะคดี'],
  responsibleAttorney: ['attorney', 'responsible_attorney', 'lawyer', 'ทนายความ', 'ผู้รับผิดชอบ'],
  openedAt:            ['open_date', 'start_date', 'วันที่เปิดคดี', 'วันที่รับคดี'],
  closedAt:            ['close_date', 'end_date', 'วันที่ปิดคดี'],
  notes:               ['notes', 'remarks', 'หมายเหตุ'],
}

// ── LexRing ───────────────────────────────────────────────────────────────────

export const LEXRING_CLIENT_MAP: Record<SoiClientField, string[]> = {
  externalId:          ['client_id', 'client_no', 'id', 'เลขที่ลูกความ', 'รหัสลูกความ', 'ลำดับ'],
  clientType:          ['client_type', 'type', 'ประเภท', 'ประเภทลูกความ', 'ประเภทผู้ว่าจ้าง'],
  firstName:           ['first_name', 'firstname', 'ชื่อ', 'ชื่อจริง'],
  lastName:            ['last_name', 'lastname', 'นามสกุล', 'สกุล'],
  companyName:         ['company', 'company_name', 'name', 'client_name', 'ชื่อบริษัท', 'ชื่อนิติบุคคล', 'ชื่อลูกความ'],
  email:               ['email', 'email_address', 'อีเมล', 'อีเมล์', 'email_ลูกความ'],
  phone:               ['phone', 'mobile', 'tel', 'telephone', 'โทรศัพท์', 'มือถือ', 'เบอร์โทร'],
  address:             ['address', 'ที่อยู่', 'ที่อยู่ปัจจุบัน'],
  nationality:         ['nationality', 'สัญชาติ', 'ประเทศ'],
  passportNumber:      ['passport', 'passport_number', 'id_number', 'เลขหนังสือเดินทาง', 'เลขบัตรประชาชน', 'เลขประจำตัว'],
  responsibleAttorney: ['attorney', 'responsible_attorney', 'lawyer', 'ทนายความ', 'ทนายผู้รับผิดชอบ', 'ผู้รับผิดชอบ'],
  originatingAttorney: ['originating_attorney', 'orig_attorney', 'ทนายผู้แนะนำ'],
  status:              ['status', 'สถานะ', 'สถานะลูกความ'],
  engagementDate:      ['open_date', 'start_date', 'วันที่รับเป็นลูกความ', 'วันที่เปิด', 'วันที่เริ่มต้น'],
  notes:               ['notes', 'remarks', 'หมายเหตุ', 'บันทึก', 'รายละเอียดเพิ่มเติม'],
}

export const LEXRING_MATTER_MAP: Record<SoiMatterField, string[]> = {
  externalClientId:    ['client_id', 'client_no', 'เลขที่ลูกความ', 'รหัสลูกความ'],
  externalMatterId:    ['matter_id', 'case_id', 'case_no', 'เลขที่คดี', 'รหัสคดี', 'หมายเลขคดี'],
  title:               ['matter_title', 'case_title', 'title', 'description', 'ชื่อคดี', 'รายละเอียดคดี', 'เรื่อง'],
  practiceArea:        ['practice_area', 'case_type', 'category', 'ประเภทคดี', 'สาขา', 'ด้านกฎหมาย'],
  subType:             ['sub_type', 'case_sub_type', 'ประเภทย่อย', 'ประเภทคดีย่อย'],
  status:              ['status', 'case_status', 'สถานะ', 'สถานะคดี'],
  responsibleAttorney: ['attorney', 'responsible_attorney', 'lawyer', 'ทนายความ', 'ทนายผู้รับผิดชอบ'],
  openedAt:            ['open_date', 'start_date', 'วันที่เปิดคดี', 'วันที่รับคดี', 'วันที่เริ่ม'],
  closedAt:            ['close_date', 'end_date', 'วันที่ปิดคดี', 'วันที่สิ้นสุด'],
  notes:               ['notes', 'remarks', 'หมายเหตุ', 'บันทึก'],
}

// ── Practice area normalisation ───────────────────────────────────────────────

/** Map source system values → Soi96 practiceArea enum */
export const PRACTICE_AREA_MAP: Record<string, string> = {
  // English variants
  immigration:         'immigration',
  'visa':              'immigration',
  'work permit':       'immigration',
  'tm.7':              'immigration',
  'tm7':               'immigration',
  corporate:           'corporate',
  'boi':               'corporate',
  'company':           'corporate',
  'commercial':        'corporate',
  'business':          'corporate',
  civil:               'civil_litigation',
  'civil litigation':  'civil_litigation',
  litigation:          'civil_litigation',
  property:            'property',
  'real estate':       'property',
  'land':              'property',
  family:              'family',
  'divorce':           'family',
  employment:          'employment',
  'labour':            'employment',
  'labor':             'employment',
  criminal:            'criminal',
  // Thai variants
  'คดีแพ่ง':           'civil_litigation',
  'คดีอาญา':           'criminal',
  'อสังหาริมทรัพย์':    'property',
  'ครอบครัว':          'family',
  'แรงงาน':            'employment',
  'บริษัท':            'corporate',
  'วีซ่า':             'immigration',
  'ตรวจคนเข้าเมือง':   'immigration',
}

/** Map source system status values → Soi96 ClientStatus */
export const CLIENT_STATUS_MAP: Record<string, string> = {
  active:    'active',
  open:      'active',
  current:   'active',
  closed:    'closed',
  inactive:  'closed',
  prospect:  'prospect',
  potential: 'prospect',
  rejected:  'rejected',
  // Thai
  'ลูกความ': 'active',
  'ปิดแล้ว': 'closed',
  'ผู้มุ่งหวัง': 'prospect',
}
