apiVersion: v1
kind: Namespace
metadata:
  name: auction-monitor
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: auction-data-pvc
  namespace: auction-monitor
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: auction-config
  namespace: auction-monitor
data:
  AUCTION_DATABASE_PATH: "/data/cache.db"
  AUCTION_IMAGES_PATH: "/data/images"
  AUCTION_NOTIFICATION_CONFIG: "desktop"
  QUARKUS_HTTP_PORT: "8081"
  QUARKUS_HTTP_HOST: "0.0.0.0"
  # Workflow schedules (cron expressions)
  AUCTION_WORKFLOW_SCRAPER_IMPORT_CRON: "0 */30 * * * ?"
  AUCTION_WORKFLOW_IMAGE_PROCESSING_CRON: "0 0 * * * ?"
  AUCTION_WORKFLOW_BID_MONITORING_CRON: "0 */15 * * * ?"
  AUCTION_WORKFLOW_CLOSING_ALERTS_CRON: "0 */5 * * * ?"
---
apiVersion: v1
kind: Secret
metadata:
  name: auction-secrets
  namespace: auction-monitor
type: Opaque
stringData:
  # Replace with your actual SMTP configuration
  notification-config: "desktop"
  # For email: smtp:your@gmail.com:app_password:recipient@example.com
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: auction-monitor
  namespace: auction-monitor
  labels:
    app: auction-monitor
    version: v1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: auction-monitor
  template:
    metadata:
      labels:
        app: auction-monitor
        version: v1
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/port: "8081"
        prometheus.io/path: "/q/metrics"
    spec:
      containers:
      - name: auction-monitor
        image: auction-monitor:latest
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 8081
          protocol: TCP
        env:
        - name: JAVA_OPTS
          value: "-Xmx256m -XX:+UseParallelGC"
        envFrom:
        - configMapRef:
            name: auction-config
        - secretRef:
            name: auction-secrets
        volumeMounts:
        - name: data
          mountPath: /data
        - name: models
          mountPath: /app/models
          readOnly: true
        resources:
          requests:
            memory: "256Mi"
            cpu: "100m"
          limits:
            memory: "512Mi"
            cpu: "500m"
        livenessProbe:
          httpGet:
            path: /health/live
            port: 8081
          initialDelaySeconds: 30
          periodSeconds: 30
          timeoutSeconds: 3
          failureThreshold: 3
        readinessProbe:
          httpGet:
            path: /health/ready
            port: 8081
          initialDelaySeconds: 10
          periodSeconds: 10
          timeoutSeconds: 3
          failureThreshold: 3
        startupProbe:
          httpGet:
            path: /health/started
            port: 8081
          initialDelaySeconds: 0
          periodSeconds: 10
          timeoutSeconds: 3
          failureThreshold: 30
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: auction-data-pvc
      - name: models
        emptyDir: {}  # Or mount from ConfigMap/PVC if you have YOLO models
      restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
  name: auction-monitor
  namespace: auction-monitor
  labels:
    app: auction-monitor
spec:
  type: ClusterIP
  ports:
  - port: 8081
    targetPort: 8081
    protocol: TCP
    name: http
  selector:
    app: auction-monitor
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: auction-monitor-ingress
  namespace: auction-monitor
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
  ingressClassName: nginx
  tls:
  - hosts:
    - auction-monitor.yourdomain.com
    secretName: auction-monitor-tls
  rules:
  - host: auction-monitor.yourdomain.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: auction-monitor
            port:
              number: 8081
---
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: auction-monitor-hpa
  namespace: auction-monitor
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: auction-monitor
  minReplicas: 1
  maxReplicas: 3
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 80
  - type: Resource
    resource:
      name: memory
      target:
        type: Utilization
        averageUtilization: 80
