/**
 * Admin Controller
 *
 * Backend status, database info, health
 * Admin only (type === 1)
 */
import { Controller, Get, UseGuards } from '@nestjs/common';
import { JwtAuthGuard } from '../auth/jwt-auth.guard';
import { AdminGuard } from '../auth/admin.guard';
import { PrismaService } from '../prisma/prisma.service';

@Controller('admin')
@UseGuards(JwtAuthGuard, AdminGuard)
export class AdminController {
  constructor(private prisma: PrismaService) {}

  /**
   * GET /api/admin/backend
   * Backend status, version, database info
   */
  @Get('backend')
  async backend() {
    const [userCount, ledgerCount, itemCount] = await Promise.all([
      this.prisma.user.count(),
      this.prisma.gnledger.count(),
      this.prisma.item.count(),
    ]);

    return {
      status: 'ok',
      timestamp: new Date().toISOString(),
      service: 'Afak 22 API',
      version: '1.0.0',
      database: {
        provider: process.env.DATABASE_URL?.includes('mysql') ? 'mysql' : 'sqlite',
        users: userCount,
        ledgerAccounts: ledgerCount,
        items: itemCount,
      },
    };
  }

  /**
   * GET /api/admin/health
   * Admin-only health check (includes DB status)
   */
  @Get('health')
  async health() {
    try {
      await this.prisma.user.count();
      return {
        status: 'ok',
        database: 'connected',
        timestamp: new Date().toISOString(),
      };
    } catch (e) {
      return {
        status: 'error',
        database: 'disconnected',
        error: e instanceof Error ? e.message : 'Unknown',
        timestamp: new Date().toISOString(),
      };
    }
  }
}
