-- Normalize berth mooring numbers from legacy hyphen+padded form ("A-01")
-- to the canonical form ("A1") that NocoDB, the public website, the
-- Documenso EOI templates, and every external reference use.
--
-- Idempotent: rows already in canonical form are untouched. The regex
-- accepts:
--   - optional hyphen between letter prefix and digits
--   - optional leading zeros on the digits
--   - one or more letters in the prefix (future-proofs "AA1" etc.)
-- Pure-numeric or otherwise non-conforming moorings (e.g. "B-LEG") are
-- left unchanged so they show up in the orphan check below for manual
-- review.
UPDATE berths
SET mooring_number = regexp_replace(mooring_number, '^([A-Z]+)-?0*(\d+)$', '\1\2')
WHERE mooring_number ~ '^[A-Z]+-0*\d+$';

-- Sanity check: surface any moorings that don't match the canonical
-- pattern after the rewrite. These need manual triage before Phase 3
-- can ship (the public website builds /berths/:mooring URLs from this
-- value). Logged via NOTICE so the migration runner prints them.
DO $$
DECLARE
  bad_count integer;
BEGIN
  SELECT count(*) INTO bad_count
  FROM berths
  WHERE mooring_number !~ '^[A-Z]+\d+$';
  IF bad_count > 0 THEN
    RAISE NOTICE 'Mooring normalization: % rows do not match ^[A-Z]+\d+$ - manual review needed', bad_count;
  END IF;
END $$;
