# Copyright (c) 2023 Yuki Kimoto
# MIT License

class HTTP::Tiny::Response {
  version_from HTTP::Tiny;
  
  allow HTTP::Tiny::Handle;
  allow HTTP::Tiny;
  
  use Mojo::Headers;
  use Mojo::Content::Single;
  
  has response : Mojo::Message::Response;
  
  # Class Methods
  private static method new : HTTP::Tiny::Response ($response : Mojo::Message::Response) {
    
    my $self = new HTTP::Tiny::Response;
    
    $self->{response} = $response;
    
    return $self;
  }
  
  # Instance Methods
  method protocol : string () {
    
    my $res = $self->{response};
    
    my $version = $res->version;
    
    my $protocol = "HTTP/$version";
    
    return $protocol;
  }
  
  method status : int () {
    
    my $res = $self->{response};
    
    return $res->code;
  }
  
  method success : int () {
    
    my $res = $self->{response};
    
    my $success = $res->is_success;
    
    return $success;
  }
  
  method reason : string () {
    
    my $res = $self->{response};
    
    my $reason = $res->message;
    
    return $reason;
  }
  
  method headers : Mojo::Headers () {
    
    my $res = $self->{response};
    
    return $res->headers;
  }
  
  method content : string () {
    
    my $res = $self->{response};
    
    # my $content = $res->content_v0;
    
    my $content = $res->content->(Mojo::Content::Single)->asset->slurp;
    
    return $content;
  }
  
}