import { Body, Controller, Get, HttpCode, Param, Post, Query } from '@nestjs/common';
import { EverdigmMailService } from './everdigm-mail.service';

type SpamActionPayload = {
  mode?: string;
  action?: string;
  mid?: string;
  mids?: string;
  isspamdb?: string;
};

type MailLogQuery = {
  startdate?: string;
  enddate?: string;
  type?: string;
  status?: string;
  fromaddr?: string;
  toaddr?: string;
  subject?: string;
  ipaddr?: string;
  page?: string;
  linenum?: string;
  isadmin?: string;
  mtype?: string;
};

@Controller('everdigm-mail')
export class EverdigmMailController {
  constructor(private readonly everdigmMailService: EverdigmMailService) {}

  @Get('unspam-requests')
  @HttpCode(200)
  async getUnspamRequests(
    @Query('viewcont') viewcont?: string,
    @Query('start') start?: string,
    @Query('end') end?: string
  ): Promise<{ maillist: unknown[]; newcount: number; total: number }> {
    return this.everdigmMailService.fetchUnspamList(viewcont, start, end);
  }

  @Get('spam/:mid')
  @HttpCode(200)
  async getSpamDetail(@Param('mid') mid: string): Promise<unknown> {
    return this.everdigmMailService.fetchSpamDetail(mid);
  }

  @Post('spam/action')
  @HttpCode(200)
  async postSpamAction(@Body() body: SpamActionPayload): Promise<unknown> {
    const mode = body.mode ?? body.action ?? '';
    const mids = body.mids ?? body.mid ?? '';
    return this.everdigmMailService.submitSpamAction(mode, mids, body.isspamdb);
  }

  @Get('mail-logs')
  @HttpCode(200)
  async getMailLogs(@Query() query: MailLogQuery): Promise<unknown> {
    return this.everdigmMailService.fetchMailLogs(query);
  }
}
