import {
    Body,
    Controller,
    Get,
    Headers,
    Post,
    Res,
    UnauthorizedException,
  } from '@nestjs/common';
  import type { Response } from 'express';
  import { AuthService } from './auth.service';
  import { LoginDto } from './dto/login.dto';
  import { Public } from '../../common/decorators/public.decorator';
  import {
    AuthenticatedUser,
    CurrentUser,
  } from '../../common/decorators/current-user.decorator';

  @Controller('auth')
  export class AuthController {
    constructor(private readonly auth: AuthService) {}

    @Public()
    @Post('login')
    async login(
      @Headers('x-tenant-subdomain') subdomain: string,
      @Body() dto: LoginDto,
      @Res({ passthrough: true }) res: Response,
    ) {
      if (!subdomain) {
        throw new UnauthorizedException(
          'Tenant subdomain header (X-Tenant-Subdomain) is required',
        );
      }
      const result = await this.auth.login(
        subdomain.toLowerCase(),
        dto.email.toLowerCase(),
        dto.password,
      );
      res.cookie('access_token', result.accessToken, {
        httpOnly: true,
        sameSite: 'lax',
        secure: process.env.NODE_ENV === 'production',
        maxAge: 1000 * 60 * 60 * 24,
      });
      return result;
    }

    @Post('logout')
    @Public()
    logout(@Res({ passthrough: true }) res: Response) {
      res.clearCookie('access_token');
      return { ok: true };
    }

    @Get('me')
    me(@CurrentUser() user: AuthenticatedUser) {
      return user;
    }
  }
  