/* $Id$ */
#include "bbs.h"

#define VICE_PLAY   BBSHOME "/etc/vice/vice.play"
#define VICE_DATA   "vice.new"
#define VICE_BINGO  BBSHOME "/etc/vice.bingo"
#define VICE_SHOW   BBSHOME "/etc/vice.show"
#define VICE_LOST   BBSHOME "/etc/vice/vice.lost"
#define VICE_WIN    BBSHOME "/etc/vice/vice.win"
#define VICE_END    BBSHOME "/etc/vice/vice.end"
#define VICE_NO     BBSHOME "/etc/vice/vice.no"
#define MAX_NO_PICTURE   2
#define MAX_WIN_PICTURE  2
#define MAX_LOST_PICTURE 3
#define MAX_END_PICTURE  5

static int
vice_load(char tbingo[6][15])
{
    FILE           *fb = fopen(VICE_BINGO, "r");
    char            buf[16], *ptr;
    int             i = 0;
    if (!fb)
	return -1;
    bzero((char *)tbingo, 6*15);
    while (i < 6 && fgets(buf, 15, fb)) {
	if ((ptr = strchr(buf, '\n')))
	    *ptr = 0;
	strcpy(tbingo[i++], buf);
    }
    fclose(fb);
    return 0;
}

static int
check(char tbingo[6][15], const char *data)
{
    int             i = 0, j;

    if (!strcmp(data, tbingo[0]))
	return 8;

    for (j = 8; j > 0; j--)
	for (i = 1; i < 6; i++)
	    if (!strncmp(data + 8 - j, tbingo[i] + 8 - j, j))
		return j - 1;
    return 0;
}
/* TODO Ptt:showfile ran_showfile more �T�̭n�X */
static int
ran_showfile(int y, int x, const char *filename, int maxnum)
{
    FILE           *fs;
    char            buf[512];

    bzero(buf, sizeof(buf));
    snprintf(buf, sizeof(buf), "%s%d", filename, (int)(random() % maxnum + 1));
    if (!(fs = fopen(buf, "r"))) {
	move(10, 10);
	prints("can't open file: %s", buf);
	return 0;
    }
    move(y, x);

    while (fgets(buf, sizeof(buf), fs))
	outs(buf);

    fclose(fs);
    return 1;
}

static int
ran_showmfile(const char *filename, int maxnum)
{
    char            buf[256];

    snprintf(buf, sizeof(buf), "%s%d", filename, (int)(random() % maxnum + 1));
    return more(buf, YEA);
}


int
vice_main(void)
{
    FILE           *fd;
    char            tbingo[6][15];
    char            buf_data[256],
                    serial[16], ch[2], *ptr;
    int             TABLE[] = {0, 10, 200, 1000, 4000, 10000, 40000, 100000, 200000};
    int             total = 0, money, i = 4, j = 0;

    setuserfile(buf_data, VICE_DATA);
    if (!dashf(buf_data)) {
	ran_showmfile(VICE_NO, MAX_NO_PICTURE);
	return 0;
    }
    if (vice_load(tbingo) < 0)
	return -1;
    clear();
    ran_showfile(0, 0, VICE_PLAY, 1);
    ran_showfile(10, 0, VICE_SHOW, 1);

    if (!(fd = fopen(buf_data, "r")))
	return 0;
    j = 0;
    i = 0;
    move(10, 24);
    clrtoeol();
    outs("�o�@�����o�����X");
    // FIXME ���o���h��@��, �}�������X�N�|�Q�\��
    while (fgets(serial, 15, fd)) {
	if ((ptr = strchr(serial, '\r')))
	    *ptr = 0;
	if (j == 0)
	    i++;
	if( i >= 14 )
	    break;
	move(10 + i, 24 + j);
	outs(serial);
	j += 9;
	j %= 45;
    }
    getdata(8, 0, "��'c'�}�l����F(�άO���N�����})): ",
	    ch, sizeof(ch), LCECHO);
    if (ch[0] != 'c' || lockutmpmode(VICE, LOCK_MULTI)) {
	fclose(fd);
	return 0;
    }
    showtitle("�o�����", BBSNAME);
    rewind(fd);
    while (fgets(serial, 15, fd)) {
	if ((ptr = strchr(serial, '\n')))
	    *ptr = 0;
	money = TABLE[check(tbingo, serial)];
	total += money;
	prints("%s ���F %d\n", serial, money);
    }
    pressanykey();
    if (total > 0) {
	ran_showmfile(VICE_WIN, MAX_WIN_PICTURE);
	move(22, 0);
	clrtoeol();
	prints("�������o�����F %d ����\n", total);
	demoney(total);
    } else
	ran_showmfile(VICE_LOST, MAX_LOST_PICTURE);

    fclose(fd);
    unlink(buf_data);
    pressanykey();
    unlockutmpmode();
    return 0;
}