#!/usr/bin/env perl
use strict;
use warnings;
use Path::Tiny;
use HTTP::Tiny;

my %files = (
  'draft2020-12/hyper-schema.json'        => 'https://json-schema.org/draft/2020-12/hyper-schema',
  'draft2020-12/links.json'               => 'https://json-schema.org/draft/2020-12/links',
  'draft2020-12/meta/applicator.json'     => 'https://json-schema.org/draft/2020-12/meta/applicator',
  'draft2020-12/meta/content.json'        => 'https://json-schema.org/draft/2020-12/meta/content',
  'draft2020-12/meta/core.json'           => 'https://json-schema.org/draft/2020-12/meta/core',
  'draft2020-12/meta/format-annotation.json' => 'https://json-schema.org/draft/2020-12/meta/format-annotation',
  'draft2020-12/meta/format-assertion.json' => 'https://json-schema.org/draft/2020-12/meta/format-assertion',
  'draft2019-09/meta/hyper-schema.json'   => 'https://json-schema.org/draft/2019-09/meta/hyper-schema',
  'draft2020-12/meta/meta-data.json'      => 'https://json-schema.org/draft/2020-12/meta/meta-data',
  'draft2020-12/meta/unevaluated.json'    => 'https://json-schema.org/draft/2020-12/meta/unevaluated',
  'draft2020-12/meta/validation.json'     => 'https://json-schema.org/draft/2020-12/meta/validation',
  #'draft2020-12/output/hyper-schema.json' => 'https://json-schema.org/draft/2020-12/output/hyper-schema',
  'draft2020-12/output/schema.json'       => 'https://json-schema.org/draft/2020-12/output/schema',
  'draft2020-12/schema.json'              => 'https://json-schema.org/draft/2020-12/schema',

  'draft2019-09/hyper-schema.json'        => 'https://json-schema.org/draft/2019-09/hyper-schema',
  'draft2019-09/links.json'               => 'https://json-schema.org/draft/2019-09/links',
  'draft2019-09/meta/applicator.json'     => 'https://json-schema.org/draft/2019-09/meta/applicator',
  'draft2019-09/meta/content.json'        => 'https://json-schema.org/draft/2019-09/meta/content',
  'draft2019-09/meta/core.json'           => 'https://json-schema.org/draft/2019-09/meta/core',
  'draft2019-09/meta/format.json'         => 'https://json-schema.org/draft/2019-09/meta/format',
  'draft2019-09/meta/hyper-schema.json'   => 'https://json-schema.org/draft/2019-09/meta/hyper-schema',
  'draft2019-09/meta/meta-data.json'      => 'https://json-schema.org/draft/2019-09/meta/meta-data',
  'draft2019-09/meta/validation.json'     => 'https://json-schema.org/draft/2019-09/meta/validation',
  'draft2019-09/output/hyper-schema.json' => 'https://json-schema.org/draft/2019-09/output/hyper-schema',
  'draft2019-09/output/schema.json'       => 'https://json-schema.org/draft/2019-09/output/schema',
  'draft2019-09/schema.json'              => 'https://json-schema.org/draft/2019-09/schema',

  'draft7/schema.json' => 'http://json-schema.org/draft-07/schema#',
);

foreach my $target (keys %files) {
  my $source = $files{$target};
  $target = path('share', $target);
  $target->parent->mkpath;

  my $response = HTTP::Tiny->new->get($source);
  die "Failed to fetch $source: $response->{status} $response->{reason}" if not $response->{success};

  $target->spew($response->{content});
}
