package App::Donburi::Web::C::JSONRPC;
use strict;
use warnings;

use parent 'App::Donburi::Web::C';

use JSON;

use App::Donburi::Util;

sub do_call {
    my $self = shift;
    my $method = $self->req->param('method');
    my $params = JSON->new->utf8->decode($self->req->param('params') || {});

    my $text = $params->{text};
    my $channel = $params->{channel};
    unless (
        $method eq 'channels'
        || defined $text && defined $channel && grep /^$method$/,
        qw( privmsg notice )
      )
    {
        #TODO Handle error?
        return [
            500,
            [ 'Content-Type' => 'application/json' ],
            [ JSON->new->utf8->encode({ message => 'internal server error', code => 000 }) ]
        ];
    }

    my $body;
    if( $method eq 'channels' ) {
        $body = store();
    } else {
        my $mode = uc $method;
        my @line = split /[\r\n]+/, $text;
        for my $msg ( @line ) {
            send_chan($channel, $mode, $channel, $msg);
        }
        $body = 'ok';
    }

    return [
        200,
        [ 'Content-Type' => 'application/json' ],
        [ JSON->new->utf8->encode( { json_rpc => "2.0", result => $body } ) ]
    ];
}

1;