-- Asignación de clases: 1-2 por alumno, desde nov 2025. Sin empalmes (distinto dia/hora por profesor y salón).
-- Profes 2..28, alumnos 83..217, materias 1..12, salones 1..10. fecha_inicio 2025-11-01.

DO $$
DECLARE
  a int; p int; m int; s int; d int; h text; hi time; hf time;
  idx int;
BEGIN
  -- 1 clase por alumno (135 clases). Prof 2 tiene alumnos 83-87, prof 3: 88-92, ... prof 28: 211-215 (solo 5: 213-217, los últimos 3 prof tienen 4-5)
  FOR a IN 83..217 LOOP
    p := 2 + (a - 83) / 5;  -- profesor (p hasta 2+26=28 para 83..216; 217: 2+134/5=28)
    IF p > 28 THEN p := 28; END IF;
    m := 1 + (a - 83) % 12;  -- materia 1..12
    d := 1 + (a - 83) % 5;   -- Lun=1..Vie=5
    -- Salón distinto por (profesor,día) para no empalmar
    s := 1 + (p + d) % 10; IF s = 0 THEN s := 1; END IF;
    h := CASE (a - 83) % 3 WHEN 0 THEN '09:00' WHEN 1 THEN '10:00' ELSE '11:00' END;
    hi := h::time;
    hf := (hi + interval '1 hour')::time;

    INSERT INTO clases (fk_id_usuario_profesor, fk_id_usuario_alumno, fk_id_cat_materia, fk_id_salon, fk_id_cat_dia, hora_inicio, hora_fin, activo, f_reg, fecha_inicio, fecha_fin)
    VALUES (p, a, m, s, d, hi, hf, true, NOW(), '2025-11-01'::date, NULL);
  END LOOP;

  -- 2ª clase para ~一半 alumnos (67): 83,85,87,..., en días/horas que no empalmen con la 1ª
  FOR idx IN 0..66 LOOP
    a := 83 + idx * 2;  -- 83,85,87,...,215 (67 alumnos)
    IF a > 217 THEN EXIT; END IF;
    p := 2 + (a - 83 + 7) % 27; IF p < 2 THEN p := 2; ELSIF p > 28 THEN p := 28; END IF;  -- prof distinto al de la 1ª
    m := 1 + (a - 82) % 12;
    d := 1 + (idx + 2) % 5;   -- día distinto
    s := 1 + (p + d + 3) % 10; IF s = 0 THEN s := 1; END IF;
    h := CASE idx % 3 WHEN 0 THEN '14:00' WHEN 1 THEN '15:00' ELSE '16:00' END;
    hi := h::time;
    hf := (hi + interval '1 hour')::time;

    INSERT INTO clases (fk_id_usuario_profesor, fk_id_usuario_alumno, fk_id_cat_materia, fk_id_salon, fk_id_cat_dia, hora_inicio, hora_fin, activo, f_reg, fecha_inicio, fecha_fin)
    VALUES (p, a, m, s, d, hi, hf, true, NOW(), '2025-11-01'::date, NULL);
  END LOOP;
END $$;
