###RUN_PERL: #!/usr/bin/perl
#
# /bsta/g
###RUN_PERL: #!/usr/bin/perl

# The frame list
#
# Copyright (C) 2017, 2023  Balthasar Szczepański
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

use strict;
#use warnings;
###PERL_LIB: use lib /botm/lib/bsta
use bsta_lib qw(failpage gethttpheader getcgi readdatafile printdatafile entityencode urlencode);
use File::Copy;

###PERL_CGI_PATH:           CGI_PATH           = /bsta/
###PERL_CGI_CSS_PATH:       CGI_CSS_PATH       = /bsta/bsta.css
###PERL_CGI_LOGO_PATH:      CGI_LOGO_PATH      = /bsta/botmlogo.png
###PERL_CGI_VIEWER_PATH:    CGI_VIEWER_PATH    = /bsta/v

###PERL_DATA_PATH:          DATA_PATH          = /botm/data/bsta/
###PERL_DATA_SETTINGS_PATH: DATA_SETTINGS_PATH = /botm/data/bsta/settings
###PERL_DATA_STATE_PATH:    DATA_STATE_PATH    = /botm/data/bsta/state
###PERL_DATA_LIST_PATH:     DATA_LIST_PATH     = /botm/data/bsta/list

###PERL_WEBSITE:            WEBSITE            = 1190.bicyclesonthemoon.info
###PERL_WEBSITE_NAME:       WEBSITE_NAME       = Bicycles on the Moon
###PERL_FAVICON_PATH:       FAVICON_PATH       = /img/favicon.png

my %http;
my %cgi;
my %settings;
my %state;
my %gotolist;

my @timetab;

my $time = time();
srand ($time-$$);

my $method;
my $password;
my $passwordOK;

my $frame;
my $last;
my $title;
my $ongtime;
my $ongstate;
my $line;

delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};
###PERL_SET_PATH: $ENV{'PATH'} = /usr/local/bin:/usr/bin:/bin;

if ($ENV{'REQUEST_METHOD'} =~ /^(HEAD|GET|POST)$/) {
	$method=$1;
}
else{
	exit failpage("Status: 405 Method Not Allowed\nAllow: GET, POST, HEAD\n","405 Method Not Allowed","The interface does not support the $ENV{'REQUEST_METHOD'} method.",$method);
}

%http = gethttpheader (\%ENV);
%cgi = getcgi($ENV{'QUERY_STRING'});

if ($method eq 'POST') {
	if ($http{'content-type'} eq 'application/x-www-form-urlencoded') {
		my %cgipost=getcgi( <STDIN> );
		foreach my $ind (keys %cgipost) {
			$cgi{$ind}=$cgipost{$ind};
		}
	}
	# multipart not supported
	else{
		exit failpage("Status: 415 Unsupported Media Type\n","415 Unsupported Media Type","Unsupported Content-type: $http{'content-type'}.");
	}
}

if ($cgi{'p'} =~ /^(.+)$/) {
	$password=$1;
}
else {
	$password='';
}

%settings=readdatafile(DATA_SETTINGS_PATH);
%state=readdatafile(DATA_STATE_PATH);
%gotolist=readdatafile(DATA_LIST_PATH);

if($password eq $settings{'password'}){
	$passwordOK = 1;
}
else{
	$passwordOK = 0;
}

print "Content-type: text/html\n";
print "\n";
if($method eq 'HEAD') {
	exit;
}

print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">'."\n";
print '<html lang="en"><head>'."\n";
print '<title>GOTO &bull; '.entityencode($settings{'story'}).' &bull; '.WEBSITE_NAME.'</title>'."\n";
print '<meta http-equiv="Content-type" content="text/html; charset=UTF-8">'."\n";
print '<link rel="icon" type="image/png" href="'.FAVICON_PATH.'">'."\n";
print '<link rel="stylesheet" href="'.CGI_CSS_PATH.'">'."\n";
print '</head><body>'."\n";
print '<a href="/"><img id="botmlogo" src="'.CGI_LOGO_PATH.'" alt="'.WEBSITE.'"></a>'."\n";
print '<div id="all">'."\n";

print '<div id="inst" class="ins">'."\n";

print '<div id="title">'."\n";
print '<H1 id="titletext">'.entityencode($settings{'story'}).'</H1>'."\n";
print '</div>'."\n";

print '</div><div id="insb" class="ins">'."\n";

print '<div id="chat">'."\n";

$last=int($state{'last'});
$ongstate=int($state{'state'});
for ($frame=0; ; ++$frame) {
	if((($frame > $last) || $ongstate<1) && !$passwordOK) {
		last;
	}
	
	$ongtime=$gotolist{'ongtime-'.$frame};
	$title=$gotolist{'title-'.$frame};
	if ($ongtime eq '') {
		last;
	}
	@timetab=gmtime($ongtime);
	
	print '<span class="'.(($frame==$last && int($state{'state'}<2))?'ni':'br').'">'.sprintf('%03d',$frame).'</span> '.sprintf('%02d.%02d.%02d %02d:%02d',$timetab[3],$timetab[4]+1,$timetab[5]-100,$timetab[2],$timetab[1]).' <a href="'.CGI_VIEWER_PATH.'/'.$frame.($passwordOK?('?p='.urlencode($password)):'').'">'.entityencode($title).'</a><br>'."\n";
}

print '</div>'."\n";

print '<div id="underlinks">'."\n";

print '<a href="'.CGI_PATH.'">BSTA</a>'."\n";

print '</div>'."\n";

print '</div>'."\n";

print '</div>'."\n";
print '<a href="/" class="cz">'.WEBSITE.'</a>'."\n";


print '</body></html>'."\n";






