/**
 * 文件职责：会员消息触达页面类型定义与默认值工厂。
 */
import type { Dayjs } from 'dayjs';

import type {
  MemberMessageAudienceType,
  MemberMessageReachChannel,
  MemberMessageReachDetailDto,
  MemberMessageReachListItemDto,
  MemberMessageReachStatsDto,
  MemberMessageReachStatus,
  MemberMessageScheduleType,
  MemberMessageTemplateCategory,
  MemberMessageTemplateDto,
} from '#/api/member/message-reach';

/** 页面主 Tab。 */
export type MemberMessageReachTabKey = 'list' | 'template';

/** 消息列表筛选表单。 */
export interface MessageReachFilterForm {
  channel?: MemberMessageReachChannel;
  keyword: string;
  status?: MemberMessageReachStatus;
}

/** 模板列表筛选表单。 */
export interface MessageTemplateFilterForm {
  category?: MemberMessageTemplateCategory;
  keyword: string;
}

/** 消息列表分页状态。 */
export interface MessageReachPager {
  items: MemberMessageReachListItemDto[];
  page: number;
  pageSize: number;
  totalCount: number;
}

/** 模板列表分页状态。 */
export interface MessageTemplatePager {
  items: MemberMessageTemplateDto[];
  page: number;
  pageSize: number;
  totalCount: number;
}

/** 消息编辑表单。 */
export interface MessageReachEditorForm {
  audienceTags: string[];
  audienceType: MemberMessageAudienceType;
  channels: MemberMessageReachChannel[];
  content: string;
  messageId: string;
  scheduleType: MemberMessageScheduleType;
  scheduledAt: Dayjs | null;
  templateId?: string;
  title: string;
}

/** 模板编辑表单。 */
export interface MessageTemplateEditorForm {
  category: MemberMessageTemplateCategory;
  content: string;
  name: string;
  templateId: string;
}

/** 页面统计视图模型。 */
export type MessageReachStatsViewModel = MemberMessageReachStatsDto;

/** 消息详情视图模型。 */
export type MessageReachDetailViewModel = MemberMessageReachDetailDto;

/** 默认消息列表筛选。 */
export function createDefaultMessageReachFilterForm(): MessageReachFilterForm {
  return {
    status: undefined,
    channel: undefined,
    keyword: '',
  };
}

/** 默认模板列表筛选。 */
export function createDefaultMessageTemplateFilterForm(): MessageTemplateFilterForm {
  return {
    category: undefined,
    keyword: '',
  };
}

/** 默认消息分页。 */
export function createDefaultMessageReachPager(): MessageReachPager {
  return {
    items: [],
    page: 1,
    pageSize: 10,
    totalCount: 0,
  };
}

/** 默认模板分页。 */
export function createDefaultMessageTemplatePager(): MessageTemplatePager {
  return {
    items: [],
    page: 1,
    pageSize: 12,
    totalCount: 0,
  };
}

/** 默认消息编辑表单。 */
export function createDefaultMessageReachEditorForm(): MessageReachEditorForm {
  return {
    messageId: '',
    templateId: undefined,
    title: '',
    content: '',
    channels: ['inapp'],
    audienceType: 'all',
    audienceTags: [],
    scheduleType: 'immediate',
    scheduledAt: null,
  };
}

/** 默认模板编辑表单。 */
export function createDefaultMessageTemplateEditorForm(): MessageTemplateEditorForm {
  return {
    templateId: '',
    name: '',
    category: 'notice',
    content: '',
  };
}

/** 默认统计数据。 */
export function createDefaultMessageReachStats(): MessageReachStatsViewModel {
  return {
    monthlySentCount: 0,
    reachMemberCount: 0,
    openRate: 0,
    conversionRate: 0,
  };
}
