import { ApiPropertyOptional } from '@nestjs/swagger';
import { IsIn, IsObject, IsOptional, IsString, Matches, MaxLength } from 'class-validator';

export class UpsertEcommerceConfigDto {
  @ApiPropertyOptional({ description: 'Subdominio público (ej: empresa1)' })
  @IsOptional()
  @IsString()
  @MaxLength(80)
  @Matches(/^[a-z0-9-]+$/, {
    message: 'El subdominio solo admite minúsculas, números y guiones.',
  })
  subdominio?: string;

  @ApiPropertyOptional({ description: 'Dominio propio del cliente (ej: tienda.suempresa.com.py). El DNS/CNAME y el certificado SSL se configuran manualmente aparte.' })
  @IsOptional()
  @IsString()
  @MaxLength(255)
  @Matches(/^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?(\.[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)+$/, {
    message: 'El dominio no tiene un formato válido (ej: tienda.suempresa.com.py).',
  })
  dominio_custom?: string;

  @ApiPropertyOptional({ enum: ['borrador', 'activa', 'pausada'] })
  @IsOptional()
  @IsIn(['borrador', 'activa', 'pausada'])
  estado?: 'borrador' | 'activa' | 'pausada';

  @ApiPropertyOptional()
  @IsOptional()
  @IsString()
  @MaxLength(160)
  nombre_comercial?: string;

  @ApiPropertyOptional()
  @IsOptional()
  @IsString()
  @MaxLength(255)
  slogan?: string;

  @ApiPropertyOptional()
  @IsOptional()
  @IsString()
  @MaxLength(500)
  logo_url?: string;

  @ApiPropertyOptional()
  @IsOptional()
  @IsString()
  @MaxLength(500)
  favicon_url?: string;

  @ApiPropertyOptional()
  @IsOptional()
  @IsString()
  sucursal_id?: string;

  @ApiPropertyOptional()
  @IsOptional()
  @IsString()
  deposito_id?: string;

  @ApiPropertyOptional()
  @IsOptional()
  @IsString()
  lista_precios_id?: string;

  @ApiPropertyOptional({ description: 'Colores + tipografía' })
  @IsOptional()
  @IsObject()
  theme_config?: Record<string, unknown>;

  @ApiPropertyOptional({ description: 'Layout home, hero, cards, cabecera, movimiento y efecto hover' })
  @IsOptional()
  @IsObject()
  layout_config?: Record<string, unknown>;

  @ApiPropertyOptional({ description: 'Config de catálogo' })
  @IsOptional()
  @IsObject()
  catalog_config?: Record<string, unknown>;

  @ApiPropertyOptional({ description: 'Slots de promociones / hero' })
  @IsOptional()
  @IsObject()
  promotion_slots?: Record<string, unknown>;

  @ApiPropertyOptional({ description: 'Templates de temporadas', type: [Object] })
  @IsOptional()
  seasonal_templates?: unknown[];

  @ApiPropertyOptional()
  @IsOptional()
  @IsObject()
  checkout_config?: Record<string, unknown>;

  @ApiPropertyOptional({ description: 'Workflow operativo por tipo de entrega' })
  @IsOptional()
  @IsObject()
  workflow_config?: Record<string, unknown>;

  @ApiPropertyOptional({ description: 'Configuración de notificaciones por email' })
  @IsOptional()
  @IsObject()
  notifications_config?: Record<string, unknown>;

  @ApiPropertyOptional()
  @IsOptional()
  @IsObject()
  footer_config?: Record<string, unknown>;

  @ApiPropertyOptional({ type: [Object] })
  @IsOptional()
  content_pages_config?: unknown[];
}
