"use client";

import { Field, Input } from "@/components/ui/Field";
import type { StudyFieldOption, SubjectFieldCoefficientRow } from "@/lib/types";

interface SubjectFieldCoefficientFieldsProps {
  fields: StudyFieldOption[];
  values: SubjectFieldCoefficientRow[];
  onChange: (values: SubjectFieldCoefficientRow[]) => void;
  readOnly?: boolean;
  defaultCoefficient?: string;
  onDefaultCoefficientChange?: (value: string) => void;
}

export function SubjectFieldCoefficientFields({
  fields,
  values,
  onChange,
  readOnly = false,
  defaultCoefficient,
  onDefaultCoefficientChange,
}: SubjectFieldCoefficientFieldsProps) {
  if (fields.length === 0) {
    if (readOnly || !onDefaultCoefficientChange) {
      return defaultCoefficient ? (
        <p className="text-sm text-[var(--muted)]">
          ضریب: {Number(defaultCoefficient).toLocaleString("fa-IR")}
        </p>
      ) : null;
    }

    return (
      <Field label="ضریب">
        <Input
          type="number"
          min="0"
          step="0.5"
          value={defaultCoefficient ?? "1"}
          onChange={(e) => onDefaultCoefficientChange(e.target.value)}
        />
      </Field>
    );
  }

  const valueMap = new Map(values.map((row) => [row.study_field_id, row.coefficient]));

  const updateField = (fieldId: number, coefficient: string) => {
    if (readOnly) return;
    const next = fields.map((field) => ({
      study_field_id: field.id,
      study_field_name: field.name,
      coefficient: field.id === fieldId ? Number(coefficient) || 0 : Number(valueMap.get(field.id) ?? 0),
    }));
    onChange(next);
  };

  const displayValue = (fieldId: number) => Number(valueMap.get(fieldId) ?? 0);

  return (
    <div className="space-y-2">
      <p className="text-sm font-medium text-primary">ضریب per رشته</p>
      <p className="text-xs text-[var(--muted)]">ضریب ۰ یعنی در این رشته تدریس نمی‌شود.</p>
      <div className="grid gap-2 sm:grid-cols-2 lg:grid-cols-3">
        {fields.map((field) => (
          <Field key={field.id} label={field.name}>
            {readOnly ? (
              <div className="rounded-xl border border-[var(--border)] bg-[var(--surface-muted)] px-3 py-2 text-sm">
                {displayValue(field.id) > 0
                  ? displayValue(field.id).toLocaleString("fa-IR")
                  : "تدریس نمی‌شود"}
              </div>
            ) : (
              <Input
                type="number"
                min="0"
                step="0.5"
                value={String(displayValue(field.id))}
                onChange={(e) => updateField(field.id, e.target.value)}
              />
            )}
          </Field>
        ))}
      </div>
    </div>
  );
}

export function formatCoefficientsSummary(
  fields: StudyFieldOption[],
  rows: SubjectFieldCoefficientRow[],
  fallback: number,
): string {
  if (fields.length === 0) {
    return `ضریب ${fallback.toLocaleString("fa-IR")}`;
  }

  const taught = rows.filter((row) => Number(row.coefficient) > 0);
  if (taught.length === 0) {
    return "در هیچ رشته‌ای تدریس نمی‌شود";
  }

  return taught
    .map((row) => {
      const name = row.study_field_name ?? fields.find((f) => f.id === row.study_field_id)?.name ?? "—";
      return `${name}: ${Number(row.coefficient).toLocaleString("fa-IR")}`;
    })
    .join(" · ");
}
